Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表达式是否有默认值,该值不为';你对它没有影响吗?_C#_Lambda_Expression - Fatal编程技术网

C# 表达式是否有默认值,该值不为';你对它没有影响吗?

C# 表达式是否有默认值,该值不为';你对它没有影响吗?,c#,lambda,expression,C#,Lambda,Expression,我的应用程序中有一些项目的筛选。它使用表达式查询工作,表达式查询在开始时为NULL 在过滤过程中有很多IF语句,这些语句的主体检查查询是否为NULL。我需要避免重复,但问题是如果查询为NULL,我不能添加像query.And(exp)这样的条件 因此,在添加条件之前-查询变量必须具有值。我的第一个想法是在应用过滤器之前添加条件并删除它,但我无法从主体中删除它,因为它不是字符串,而且我还没有为它找到这样的方法。然后我尝试添加条件,它告诉过滤器接受ID等于MAXINT的项目,但这不起作用,因为查询体

我的应用程序中有一些项目的筛选。它使用表达式查询工作,表达式查询在开始时为NULL

在过滤过程中有很多IF语句,这些语句的主体检查查询是否为NULL。我需要避免重复,但问题是如果查询为NULL,我不能添加像query.And(exp)这样的条件

因此,在添加条件之前-查询变量必须具有值。我的第一个想法是在应用过滤器之前添加条件并删除它,但我无法从主体中删除它,因为它不是字符串,而且我还没有为它找到这样的方法。然后我尝试添加条件,它告诉过滤器接受ID等于MAXINT的项目,但这不起作用,因为查询体看起来像{p=>p.ID==2147483647,还有}。不是或,但也是。因此,结果是0个项目

            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; }