加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ with GROUP BY和HAVING COUNT

发布时间:2020-12-15 22:29:15 所属栏目:百科 来源:网络整理
导读:我想了解我在 Linq的GROUP BY查询中做错了什么.我尝试了很多例子(即 Linq with group by having count),但我仍然得到更多结果(因为跳过了WHERE).我的代码是这样的: var test = session.QuerySomeClass() .GroupBy(c = new { c.Var1,c.Var2,c.Var3 }) .Where
我想了解我在 Linq的GROUP BY查询中做错了什么.我尝试了很多例子(即 Linq with group by having count),但我仍然得到更多结果(因为跳过了WHERE).我的代码是这样的:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读