非常困惑如何在LINQ中分组,甚至更混淆HAVING

时间:2013-03-20 21:21:20

标签: c# sql linq

我是Linq的新手。我正在尝试转换这个简单的SQL查询,但找不到有关如何将SQL转换为LINQ的任何优秀资源。我的SQL查询是:

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();

任何帮助或资源都会很棒。

2 个答案:

答案 0 :(得分: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 :(得分:1)

要使分组正常工作,它看起来像你想要的那样(在查询语法而不是lambdas中):

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