2010-12-08 7 views
0

これを達成しようとしていますが、クエリが実行されたときに最初のwhere句のみが使用されています。Linq to SQL - 実行時に複数の場所にクラッシュする

これは.Net 3.5のために必要なので、WhereIf 4.0は使用できません。

を試してみてください

var query = 
    from tb in dataContext.TableOne 
    where tb.DateTimeCreated >= fromDate && 
     tb.DateTimeCreated <= toDate.AddDays(1) 
    select tb; 

if (!string.IsNullOrEmpty(reference)) 
{ 
    query.Where(tb => tb.Reference = reference)); 
} 

おかげ

+0

あなたは 'query.Where(tb => tb.Reference == reference);を意味しましたか? – Steven

答えて

3
if (!string.IsNullOrEmpty(reference)) 
     query = query.Where(tb => tb.Reference = reference)); 
+0

@veggerby&Ives。あなたは私を固定してくれてありがとう、私の間違いは、クエリに私のwhere節を割り当てていないことがわかりました。 – SetiSeeker

0

は、単に "1"

var query = (from tb in dataContext.TableOne 
         where (tb.DateTimeCreated >= fromDate && tb.DateTimeCreated <= toDate.AddDays(1)) && (string.IsNullOrEmpty(reference) || tb.Reference == reference) 
         select tb 
       ); 

でそれを行うか、アイヴスが言うように、実行します。

query = query.Where(...) 
+0

"one"で実行し、そのクエリが不活性部分を持つデータベースに送信された場合、クエリオプティマイザはどの部分が不活性であるかを知ることができません。不正なクエリプランが生成されます。 –