linq查询表达式中的动态where条件

linq查询表达式中的动态where条件,linq,dynamic,expression,where,Linq,Dynamic,Expression,Where,我的代码: IEnumerable<DataRow> whrRowEnum; whrRowEnum = from r in dtInput.AsEnumerable() where r.Field<string>("EMP_DEP") == "DEP1" orderby EMP_DEP select r; IEnumerable whrRowEnum; whrRowEnum=来自dtInput.AsEnumerable(

我的代码:

IEnumerable<DataRow> whrRowEnum;
whrRowEnum  = from r in dtInput.AsEnumerable()
        where r.Field<string>("EMP_DEP") == "DEP1"
        orderby EMP_DEP
        select r;
IEnumerable whrRowEnum;
whrRowEnum=来自dtInput.AsEnumerable()中的r
其中r.Field(“EMP_DEP”)=“DEP1”
由EMP_DEP订购
选择r;

由于硬编码的where条件,上述代码工作正常,但在运行时,我需要在linq查询中添加多个where条件,如r.Field(“EMP_DEP”)==“DEP1”和&r.Field(“EMP_ID”)==“EMP1”

,您可以使用lambda语法根据条件组合查询:

IEnumerable<DataRow> query = dtInput.AsEnumerable();

if (condition1)
   query = query.Where(r => r.Field<string>("EMP_DEP") == "DEP1");

if (condition2)
   query = query.Where(r => r.Field<string>("EMP_ID") == "EMP1");

var whrRowEnum = query.OrderBy(r => r.Field<string>("EMP_DEP"));
IEnumerable query=dtInput.AsEnumerable();
如果(条件1)
query=query.Where(r=>r.Field(“EMP_DEP”)==“DEP1”);
如果(条件2)
query=query.Where(r=>r.Field(“EMP_ID”)==“EMP1”);
var-whrRowEnum=query.OrderBy(r=>r.Field(“EMP_DEP”);
另一个选项是向查询过滤器添加条件

whrRowEnum  = from r in dtInput.AsEnumerable()
              where (!condition1 || (r.Field<string>("EMP_DEP") == "DEP1")) &&
                    (!condition2 || (r.Field<string>("EMP_ID") == "EMP1"))
              orderby EMP_DEP
              select r; 
whrRowEnum=来自dtInput.AsEnumerable()中的r
其中(!condition1 | |(r.Field(“EMP_DEP”)=“DEP1”))&&
(!condition2 | |(r.Field(“EMP_ID”)=“EMP1”))
由EMP_DEP订购
选择r;

应该是
(!condition1 | |(…)&&(!condition2 | |(…)
或者如果condition1或2为false,where子句等于false。@Sergey对于第二个选项,是否有办法将该条件块外包给方法/函数?@ibubi您可以使用任何您想要的东西-唯一的条件是布尔输出。所以,
其中IsFoo(r)
完全可以。但在这种情况下,我会坚持使用方法语法
行。其中(IsFoo)
更具可读性