2010-09-10 114 views

回答

33

是的,你可以像:

var query = someList.Where(a => a == "something"); 
if (condition) 
{ 
    query = query.Where(b => b == "something else"); 
} 
var result = query.ToList(); 

因爲Where是生產的IQueryable,執行被推遲到ToList在我的例子,所以你可以鏈Whereš在一起,你想要多少,然後就執行它在你通過了你所有的條件之後。

+2

+1最好的答案了三個。 – 2010-09-10 07:34:15

+0

如果不產生IQueryable的,它是生產的IEnumerable。錯誤答案 – 2017-04-11 10:20:45

+0

@OmerK哪裏的,其實產品的IQueryable,如果對象您正在運行的擴展方法也是一個IQueryable,如果你在一個IEnumerable運行它,你會得到一個IEnumerable。 – 2017-08-19 19:29:26

5

。利用在LINQ WhereIf extenstion方法avaialbe的

實施例的

if (SearchControlMain.PostingID.HasValue) 
    query = query.Where(q => q.PostingID == SearchControlMain.PostingID); 

代替上面去的下面

query = query.WhereIf(SearchControlMain.CategoryID.HasValue, q => q.CategoryID == SearchControlMain.CategoryID); 

LINQ WhereIf Extension Method

LINQ to SQL Where Clause Optional Criteria

+1

的環節之一是死的,沒有這樣的事情在我的EF WhereIf''。 – A1rPun 2015-12-31 13:02:08

0

我不知道問題是什麼,但一個可能的答案可能是:

是,

list.Where(item => { if (Foo(item)) return true; else return false; }); 

它會說一些簡單的複雜的方式,雖然。

+0

你怎麼試過? – 2010-09-10 07:32:15

+1

是的,至少它與linq-to-objects一起工作。 – 2010-09-10 07:35:25

+0

這等於:list.Where(item => Foo(item)); – 2010-09-10 08:26:59

4

不知道這是適當的,但它是非常有用的,你可以很輕易地使用IFS有條件的where子句:

var r = (from p in productinfo.tblproduct 
        where p.Accountid == accountid 
        select p); 

      if (uuf1 != null) 
       r = r.Where(p => p.UnitUserField1 == uuf1); 

      if (uuf2!= null) 
       r = r.Where(p => p.UnitUserField2 == uuf2); 

所以在where子句將根據什麼是在UUF1或UUF2即進行修正你可能只與信息UUF1,在這種情況下,將採取與忽略UUF2 where子句中,你可能有兩種情況,即它需要兩個或者您可能沒有任何在UUF1或2,你的where子句將只取被認爲是where子句。

2

我有這樣一個場景,我不得不列表本身內檢查空。這就是我所做的。

items = from p in items 
     where p.property1 != null //Add other if conditions 
     select p; 

// Use items the way you would use inside the if condition 

但隨着凱爾指出,今年將工作太 -

items = items.Where(a => a.property1 != null); 
14
var query = someList.Where(a => (someCondition)? a == "something" : true); 

所以,如果 'someCondition' 是假的, '去哪兒' 將被跳過。

+0

這真的應該是被接受的答案 – 2017-09-01 01:22:38

1

在我的情況下,有根據搜索鍵,其中有兩個「條件」,所以我所做的:

var query = db.Package.Include("SomeThing") 
    .Where(item => searchString1 == null || searchString1 == "" || item.Contains(searchString1)) 
    .Where(item => searchString2 == null || searchString2 == "" || item.Contains(searchString2)); 
    ...