我是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();
任何帮助或资源都会很棒。
答案 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;