var test = session.Query<SomeClass>() .GroupBy(c => new { c.Var1,c.Var2,c.Var3 }) .Where(g => g.Count() > 1) .Select(g => g.Key.Var3) .ToList();
这给出了229个结果(所有记录).我想在Linq中构建的查询是:
SELECT Var3 FROM myTable GROUP BY Var1,Var2,Var3 HAVING COUNT(*) > 1
不知何故,查询给了我27个结果,但Linq表达式给了我229(全部).当我将Linq表达式的where / select部分替换为以下内容时,我会得到一个计数为2或更高的列表:
.Select(g => new { Item = g.Key,Count = g.Count() })
但我不想要一个包含项目(和计数)的列表并且必须通过该列表,我希望HAVING部分在Linq表达式中工作…
编辑2:如果你看看LINQ Group By Multiple fields -Syntax help,这对我也有用.但是,我将获得Var1,Var3和Count的对象列表.在这个列表中,我只想要Count3大于1的Var3.
谁可以指出我正确的方向?
编辑1:正如我在我的介绍中所说,问题Linq with group by having count没有回答我的问题.如果我使用这个代码,我仍然有一组229个结果而不是27个实际上是“重复”的结果(意思是,在计数超过1的组之后).
编辑3:我现在正在使用以下内容.我需要两个陈述,我认为这很奇怪,但如前所述,这似乎是仅选择具有计数>的记录的唯一方法. 1.
var querygroup = session.Query<SomeClass>() .GroupBy(e => new { e.Var1,e.Var2,e.Var3 }) .Select(s => new { s.Key.Var1,s.Key.Var2,s.Key.Var3,Count = s.Count() }) .ToList(); var duplicates = querygroup.Where(g => g.Count > 1) .Select(g => new SomeClass() { Var1 = g.Var1,Var2 = g.Var2,Var3 = g.Var3}) .ToList();
请注意,我决定选择值Var1和Var2,而不是仅选择Var3,并将它们存储在SomeClass()中.这只是一个补充,选择所有内容并没有帮助创建1个语句来获得此选择.
编辑4:我可以在duplicates变量中使用.Where ..部分并将其添加到querygroup语句中,从而创建整个语句.成功?似乎矫枉过正,但至少它有效.
如果有人能找出我需要2个陈述的原因,请详细说明:)
解决方法
var test = session.Query<SomeClass>() .GroupBy(c => new { c.Var1,c.Var3 }) .Select(d=> new { var1 = d.Key.var1,var2 = d.Key.var2,var3=d.Key.var3,records = d.ToList()}) .Where(e => e.records.Count() > 1) .Select(g => g.Var3) .ToList();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。