2013-07-07 72 views
0

這裏是我的查詢:添加WHERE子句如果不爲NULL

List<string> kwList = GetFilterKeywords(); // returns NULL none keyword selected 
    var res = from d in ctx.Books 
    where (kwList == null || kwList.Contains(d.Name)) 
    select d; 

看起來是不合法的添加WHERE子句如果kwList爲NULL。所以我的問題是:有什麼方法可以在IF/ELSE IF構造中添加更多的where子句到相同的查詢?

我的意思是:

var res = from d in ctx.Books 
       select d; 
    if (kwList != null) 
    { 
     res.Where(d => kwList.Contains(d.Name); 
    } 
+0

* *您正在使用Linq-to-SQL(由C#團隊構建的ORM作爲* LINQ概念驗證*使用'DataContext'類和'.dbml'模型文件),***或者你正在使用實體框架(可能帶有一個'.edmx'模型文件或代碼優先的方法),然後你使用的是Linq-to-Entities查詢 - 但是你不能同時使用兩者時間.... –

回答

0
var res = ctx.Books; // no need to write select 
if (kwList != null) 
    res = res.Where(x => kwList.Contains(x.Name)); 

foreach (d in res) { 
    ... 
} 
0

可以使用三級運營商

var res = kwList == null ? ctx.Books : ctx.Books.Where(x => kwList.Contains(x.Name)); 

如果要修改在後續case語句初始LINQ查詢,確保重新分配初始查詢到修改:

var res = ctx.Books; 
    if (a == b) 
    { 
     // reassign here 
     res = res.Where(x => kwList.Contains(x.Name)); 
    } 
    else if (a == c) 
     res = res.Where(x => x.Id == y); 
+0

另外,最好是要明確對資源的類型(IQueryable的不VAR),以避免試圖將.OrderBy後動態添加。凡條款。 –