2015-05-04 48 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)); 

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