2010-11-09 80 views
11

我使用LINQ創建我的where子句,像這樣:LINQ WHERE與OR

var query = from x in context.Xs 
      select x; 

if (y == ...) 
{ 
    query = query.Where(x => x.Y == 1); 
} 

我有一堆這些 「如果....其中」 語句。我遇到的問題是,所有這些wheres加入where條款使用AND,但我需要所有我的where子句使用OR。有沒有簡單的方法將此代碼移植到OR代碼中?或者甚至用OR來做到這一點最簡單的方法是什麼?

謝謝。

+2

的可能的複製[LINQ的:「或」相當於在哪裏()](http://stackoverflow.com/questions/2101540/linq-or-equivalent-的-位置)。 – rsenna 2010-11-09 16:42:34

回答

7

PredicateBuilder是您的問題的完美解決方案。它允許您不斷添加個人「AND」以及「OR」語句。

+0

我不得不從提供給我的項目的鏈接中複製類,並在where語句中使用predicate.Compile()。 – 2010-11-11 14:27:23

8

你可以這樣做:

var query = from x in context.Xs 
     where 
      (x.X == 1) || 
      (x.Y == 2) || 
      (x.Z == "3") 
     select x;