2009-06-23 12 views
3

は、ここで私が持っているものだ:私は開始と終了の間で製品価格のすべての合計を取得したいが、私はどのように把握することはできませんDateTime startDateTime end
ラムダ式のSQL WHEREの等価性は何ですか?

decimal sum = _myDB.Products.Sum(p => p.Price).GetValueOrDefault(); 

私はまた、二つの日付を持っていますラムダ方程式に変数を組み込む。

ラムダ方程式に変数を組み込んで、何らかの仕様を与えるにはどうすればよいですか?

答えて

11

使用Enumerable.Where

decimal sum = _myDB.Products 
        .Where(p => (p.Date >= start) && (p.Date <= end)) 
        .Sum(p => p.Price) 
        .GetValueOrDefault(); 
+6

実装の面で合意、しかし、このようなクエリでは、複数行にたくさん明確にしています。ドットを整列させてください:) –

+0

フォーマット上の良い点 - 私はちょうど一貫性のために彼のオリジナルの質問のフォーマット方法に固執しましたが、これは私が通常自分のコードで書く方法です。 –

+0

@ジョン:完了。今まであなたのコメントは見られませんでした。 –

0
_myDB.Products 
.Where(p => p.start >= "somevalue") 
.Where(p => p.end <= "somevalue") 
.Sum(p => p.Price).GetValueOrDefault(); 
+0

2つのwhere句を別々の述語で持つ必要はありません。 –

+0

このスタイルは、読みやすさを向上させるので好きです。 – Rony

1
decimal sum = _myDB.Products 
.Where(p => p.Start >= mystartDate && p.End <= myenddate) 
.Sum(p => p.Price) 

恩赦私の構文。しかし、私はあなたがその考えを得ることを願っています。

EDIT:Reedの提案に基づいて修正されました。
旧コード(間違った)

decimal sum = _myDB.Products 
.Sum(p => p.Price) 
.Where(p => p.Start >= mystartDate && p.End <= myenddate) 
+0

Where句はSumの前に移動する必要があります。 Sumは10進数を返し、10進値では ".Where"を使用できません。 –

+0

みんな、これは別の方法で動作しますか(つまり、WHEREとSUMの違いはありますか?) – shahkalpesh

+1

これはまったくコンパイルされません。あなたは実行することはできません。単一の値では、Sum()によって返されるものです。 –