1

単純な検索LINQステートメントを作成しようとしています。文字列がWHEREに渡されると、空の文字列が誤った結果を引き起こします。

tmp = (from p in tmp
       where
           p.Customer.custEmail.Contains(filter.Email) &&
           p.Customer.custLastName.Contains(filter.LastName) &&
           p.orderID == id
       select p).ToList();
}

filter.LastNameが空の場合でも、クエリは「」を見つけようとします。その結果、レコードはありません。

たくさん書くことなく

if (!String.IsNullOrWhiteSpace(filter.LastName))

フィルタ項目ごとに、LINQコマンド内でこれを行う方法はありますか?

4

2 に答える 2

1

そのための拡張メソッドを書くことができます:

public static bool ContainsIfNotNullOrWhiteSpace(this string source, string searched)
{
    return string.IsNullOrWhiteSpace(searched) ?
           false :
           source.Contains(searched);
}

次に、クエリ式で使用できます。

from p in tmp
where
    p.Customer.custEmail.ContainsIfNotNullOrWhiteSpace(filter.Email) &&
    p.Customer.custLastName.ContainsIfNotNullOrWhiteSpace(filter.LastName) &&
    p.orderID == id
select p
于 2012-04-15T18:33:00.013 に答える
1

where句にチェックを追加するだけです。

from p in tmp
where
    (!String.IsNullOrWhiteSpace(filter.Email) && 
     p.Customer.custEmail.Contains(filter.Email)) &&
    (!String.IsNullOrWhiteSpace(filter.LastName) &&
     p.Customer.custLastName.Contains(filter.LastName)) &&
    p.orderID == id
select p
于 2012-04-15T18:33:24.017 に答える