2013-07-22 51 views
0

我在這裏使用.SELECT聲明掙扎。。使用lambda和Entity Framework的SELECT語句

這裏是我的代碼片段;

var payoutsPerLocation = locations.Select(l => l.Payouts); 

foreach (var payouts in payoutsPerLocation) 
{ 
    Console.WriteLine(payouts.Sum(pos=>pos.Amount)); 
} 

凡位置是一個列表,一個地方有一個或多個支付。我想獲得所有支出。

上面的代碼的結果低於

0 
0 
0 
0 
0 
0 

它應該是每個位置付款的量的總和。看起來我沒有得到任何支出記錄。但是,當我嘗試使用下面的代碼(測試如果我得到支付);

var payoutsPerLocation = locations.FirstOrDefault().Payouts; 

foreach (var payout in payoutsPerLocation) 
{ 
    Console.WriteLine(payout.Amout); 
} 

該地點有支出。你們認爲我在這裏做錯了什麼?

任何幫助表示讚賞。

+0

該代碼看起來很好,所以別的是這個問題。你確定'金額'不是0嗎?如果你在沒有LINQ的情況下編寫代碼,它會工作嗎? – Gabe

+0

Hi @Gabe,我確定'金額'不是零。當我使用'FirstOrDefault'時,我得到正確的記錄。 – janmallari

+0

請包括「位置」的類定義。我懷疑'Location.Payouts'不是虛擬的。 – Aron

回答

0

我不知道爲什麼它給你零,但是你不應該在foreach循環中評估Linq表達式。它會導致數據庫的往返次數過多。試試這個:

var sumPerLocation = locations.Select(l => l.Payouts.Sum(p => p.Amount)); 
foreach (var sum in sumPerLocation) 
{ 
    Console.WriteLine(sum); 
} 
+0

這可能不是我在找的東西。不過謝謝! – janmallari

+1

@janmallari:這很好,但如果你不解釋爲什麼這沒有幫助,那麼我或其他人就很難提供任何進一步的建議。 –

+0

感謝提示@Marcelo Cantos!這是我第一次在這裏發佈。讓我重述一下我的評論。嘗試了你的建議,但它不起作用。它仍然是零。當我嘗試獲取查詢時,它說它選擇了位置。對不起,我是編程的新手。 T.T – janmallari