c# – LINQ with GROUP BY和HAVING COUNT

我想了解我在
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,Var2,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.Var2, 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();
点赞