2012-09-09 22 views
6

検索条件に基づいてLINQステートメントを作成する上での提案はありますか?LINQの条件付きWHERE

「SearchCriteria」クラスのインスタンスで、すべてのパラメータをnullに設定して渡します。

私はその後

if (sc.a != null) 
    // add to where 

if (sc.b != null) 
    // add to where 

に重要なことは、これらの論理和ではない論理積ことになっているですたいです。

ヒント?

ボーナスポイントの場合、intに 'contains'を使用したいと思いますか?しかし、私は唯一等しいかどうかを知ることはできません。

+0

"または" 結合するのが難しいです。表現木やビジター/リライタを必要とすることを適切に行うこと。いくつの変数がありますか?ちょうど2つ?そうであれば、率直にそれを徹底的に実行します(つまり、3つの異なる正規の行 - 1つのX、1つのY、1つのX || Y) –

+0

ORMとは何ですか? LINQ to SQLまたはEntities Framework? – abatishchev

+0

それは潜在的に12ダースのパラメータ..と私はEFを使用しています.... –

答えて

4

試してみてください。また

.Where(x => 
    (x.a != null ? x.a == a : false) && 
    (x.b != null ? x.b == b : false)); 

または

.Where(x => 
    (x.a != null && x.a == a) || 
    (x.b != null && x.b == b)); 

.Where(x => new int[] { 1, 2, 3 }.Contains(x.i)); 
+0

&&は|| ? –

+0

@Marc: '?:'演算子の右手に 'false'があります。正しい? – abatishchev

+0

これはきれいで洗練されたソリューションだと思われます。 2番目の部分を再。私が持っているものは12345のint OrderIDです。私は123を検索し、あなたができる文字列で123 *を見つけることができるようにしたいと思います。これを働かせることができますか? –