2013-03-20 44 views
2

我是Linq的新手。我試圖轉換這個簡單的SQL查詢,但找不到任何有關如何將SQL轉換爲LINQ的優秀資源。我的SQL查詢是:關於如何在LINQ中進行分組,非常困惑,甚至更加困惑HAVING

SELECT SomeValue 
FROM SomeTable 
GROUP BY SomeValue 
HAVING SUM (OtherValue) > 0; 

我不太瞭解LINQ,足以做到這一點。我在獲得GROUP BY的工作方面遇到了很多麻煩,我甚至沒有試圖解決HAVING SUM。

我試了幾件事。這是最近的,但它仍然是非常錯誤的:

from entry in SomeTable 
group entry by entry.SomeValue into grp 
select grp.Select(x => x.SomeValue).toList(); 

任何幫助或資源將是偉大的。

+0

有你看着[這](http://code.msdn.microsoft.com/ 101-LINQ-Samples-3fb9811b)? – control 2013-03-20 21:26:17

+0

資源http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – Overmachine 2013-03-20 21:27:11

回答

1

要獲得分組工作,它看起來像你想這樣(在查詢語法而不是lambda表達式):

from entry in SomeTable 
group entry by entry.SomeValue into grp 
where grp.Sum(x => x.OtherValue) > 0 
select grp.Key; 
4

等效LINQ的語句應該是這樣的:

SomeTable.GroupBy(x => x.SomeValue) 
     .Where(g => g.Sum(x => x.OtherValue) > 0) 
     .Select(g => g.Key); 

它首先通過組SomeValue。結果將是一個組的列表。每個組又包含所有具有相同的SomeValue的行。
下一步創建一個過濾器(Where)。該過濾器將僅返回該組中行的OtherValue之和大於零的那些組。
最後,從過濾的組中選擇每個組的密鑰。組的關鍵是在GroupBy中指定的值。

+1

比LINQ關鍵詞好得多 – 2013-03-20 21:27:05