C# 表达式是否有默认值,该值不为';你对它没有影响吗?
我的应用程序中有一些项目的筛选。它使用表达式查询工作,表达式查询在开始时为NULL 在过滤过程中有很多IF语句,这些语句的主体检查查询是否为NULL。我需要避免重复,但问题是如果查询为NULL,我不能添加像query.And(exp)这样的条件 因此,在添加条件之前-查询变量必须具有值。我的第一个想法是在应用过滤器之前添加条件并删除它,但我无法从主体中删除它,因为它不是字符串,而且我还没有为它找到这样的方法。然后我尝试添加条件,它告诉过滤器接受ID等于MAXINT的项目,但这不起作用,因为查询体看起来像{p=>p.ID==2147483647,还有}。不是或,但也是。因此,结果是0个项目C# 表达式是否有默认值,该值不为';你对它没有影响吗?,c#,lambda,expression,C#,Lambda,Expression,我的应用程序中有一些项目的筛选。它使用表达式查询工作,表达式查询在开始时为NULL 在过滤过程中有很多IF语句,这些语句的主体检查查询是否为NULL。我需要避免重复,但问题是如果查询为NULL,我不能添加像query.And(exp)这样的条件 因此,在添加条件之前-查询变量必须具有值。我的第一个想法是在应用过滤器之前添加条件并删除它,但我无法从主体中删除它,因为它不是字符串,而且我还没有为它找到这样的方法。然后我尝试添加条件,它告诉过滤器接受ID等于MAXINT的项目,但这不起作用,因为查询体
Expression<Func<Project, bool>> query = null, exp = null;
这就是我希望它的工作方式:
if (filter.ViewSomeProjects)
{
query.And(some conditions);
}
所以,当查询在开始时为NULL时,我不能按我想要的方式执行
我的问题是:有没有办法删除表达式体的一部分?
是否可以向表达式中添加不影响结果的无用条件?作者Joe Albahari提供了一个True
和False
,您可以将其用作起点
public static Expression<Func<T, bool>> True<T> () { return f => true; }
public static Expression<Func<T, bool>> False<T> () { return f => false; }
publicstaticexpressiontrue(){returnf=>True;}
公共静态表达式False(){return f=>False;}
如果您从其中一个开始,那么您可以根据默认行为构建查询(通常,在向默认值“所有结果”添加限制时,True可以正常工作)使用
x=>True
作为初始值是否有效?是的,是的,但它会影响筛选器,因此它不起作用,因此,我有整个项目清单@SweeperSo,我只是简单地将p=>true(例如)分配给查询,因此它不是NULL,但过滤条件不会发生任何变化?在分配p=>true之后,查询变量不是NULL,我可以使用query.and(…)。但结果是,我有一个没有过滤的所有项目的列表。
public static Expression<Func<T, bool>> True<T> () { return f => true; }
public static Expression<Func<T, bool>> False<T> () { return f => false; }