2015-05-04 35 views
2

我想在我的记录使用多种过滤器,所以我试着用以下多个where LINQ

var myData = ... 
var fdata = myData 
      .Where(x => x.Type == Domain.Model.MyType.A) 
      .Where(x => x.Type == Domain.Model.MyType.B) 
      .Where(x => x.Type == Domain.Model.MyType.C) 
.ToList(); 

我想查询的数据,如果FDATA是任何这种的MyType(A,B或C)的。

+2

有什么问题?你只说了你想要的。我怀疑它不仅仅知道如何使用'||'运算符。 –

回答

3

例如

var fdata = myData.Where(x => x.Type == Domain.Model.MyType.A || x.Type == Domain.Model.MyType.B || x.Type == Domain.Model.MyType.C) 
2

很简单:

var myData = ... 
var fdata = myData 
      .Where(x => x.Type == Domain.Model.MyType.A || 
      x.Type == Domain.Model.MyType.B || 
      x.Type == Domain.Model.MyType.C) 
.ToList(); 
2
var myData = ... 
var fdata = 
    myData 
     .Where(x => 
      x.Type == Domain.Model.MyType.A 
       || x.Type == Domain.Model.MyType.B 
       || x.Type == Domain.Model.MyType.C) 
     .ToList(); 

你最好在年底做一个.ToArray(),除非你需要一个列表,因为它是更多的内存效率。

3

你可以写这样的代码:

var fdata = myData 
     .Where(x => x.Type == Domain.Model.MyType.A || 
     x.Type == Domain.Model.MyType.B || 
     x.Type == Domain.Model.MyType.C) 
     .ToList(); 
0

如果你不喜欢||可以使用...

Domain.Model.MyType[] types = new Domain.Model.MyType[] { 
    Domain.Model.MyType.A, Domain.Model.MyType.B, Domain.Model.MyType.C 
}; 
var myData = ... 
var fdata = myData.Join(types, x => x.Type, y => y, (x, y) => x); 

或。 ..

Domain.Model.MyType[] types = new Domain.Model.MyType[] { 
    Domain.Model.MyType.A, Domain.Model.MyType.B, Domain.Model.MyType.C 
}; 
var myData = ... 
var fdata = myData.Where(x => types.Contains(x.Type)); 

...但||是很好的解决方案。