多个linq

时间:2015-05-04 07:50:51

标签: c# 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)中的任何一个,我想查询数据。

5 个答案:

答案 0 :(得分:3)

例如

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

答案 1 :(得分: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();

答案 2 :(得分: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();

答案 3 :(得分: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(),因为它的内存效率更高。

答案 4 :(得分: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));

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