2013-12-12 48 views
0

我的代码:动态where条件在LINQ查询表达式

IEnumerable<DataRow> whrRowEnum; 
whrRowEnum = from r in dtInput.AsEnumerable() 
     where r.Field<string>("EMP_DEP") == "DEP1" 
     orderby EMP_DEP 
     select r; 

上面的代码由于做工精细的硬编码在那里的条件,但在运行时我需要添加多个WHERE条件在我的LINQ查询像r.Field( “EMP_DEP”)== “DEP1” & & r.Field( “EMP_ID”)== “EMP1”

回答

0

您可以使用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")); 

另一种选择是向查询过滤器添加条件

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; 
+1

它应该是'(!condition1 || (...))&&(!condition2 ||(...))'或者当条件1或2为假时,where子句等于false。 – Matten

+0

@Matten谢谢!固定 –