EF / Code First / Linq ---如何过滤查询“循环”但使用“OR”

时间:2013-05-06 07:40:30

标签: linq

通常当我们有一个包含多个可能过滤器的网格结果时,我们可能会使用与此类似的逻辑:

var query = db.Something;
if(isFilter1 != null)
     query = query.Where(x=>x.Prop1 == isFilter1);
}
if(isFilter2 != null)
     query = query.Where(x=>x.Prop2 == isFilter2);
}
.... etc...
var finalResult = query.ToList();

但是现在我想使用这种逻辑,但使用“OR”而不仅仅是“AND”。 我想要实现的“查询的最终结果”的简单示例。

var finalResult = db.Something.Where(x => 
           x.Prop1 == null && 
           x.Prop2 != 0 && 
           x.Prop3 == id && 
           (x.Prop4 == "String1" || x.Prop4== "String2" || x.Prop4== "String3"));

1 个答案:

答案 0 :(得分:2)

您可以使用Contains方法:

var list = new[] { "string1", "string2", "string3"};

var finalResult = db.Something.Where(x => 
       x.Prop1 == null && 
       x.Prop2 != 0 && 
       x.Prop3 == id && list.Contains(x.Prop4));