0

ここに私のクエリがあります:

    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;

kwList が NULL の場合、where 句を追加するのは正当ではないようです。だから私の質問は: IF/ELSE IF 構築で同じクエリにさらに where 句を追加する方法はありますか?

つまり:

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

2 に答える 2

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) {
    ...
}
于 2013-07-07T13:45:23.423 に答える
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);  
于 2013-07-07T19:28:32.753 に答える