具有GROUP BY和COUNT的LINQ

贾卜

我想了解我GROUP BY在Linq中的查询做错了什么我已经尝试了许多示例(即Linq与具有count的group一起使用),但是我仍然得到了更多的结果(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字段-Syntax help,这也对我有用但是,我将获得带有Var1,Var2,Var3和Count的对象列表。在此列表中,我只想将Count大于1的对象的Var3。

谁能指出我正确的方向?

编辑1:正如我在引言中所说的,Linq与group by的问题通过计数无法解决我的问题。如果使用此代码,则仍然有一组229个结果,而不是实际“重复”的27个结果(意味着,该组的计数大于1)。

编辑3:目前,我正在使用以下内容。我需要两个语句,我认为这很奇怪,但是如前所述,这似乎是仅选择count> 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并将其存储在SomeClass()中,而不是仅选择Var3。这只是一个附加,选择所有内容都无助于创建1条语句来获得此选择。

编辑4:我当然可以.Where..duplicates变量一部分添加到querygroup语句中,从而形成一个完整的语句。成功?似乎过分杀伤,但至少它能起作用。

如果有人能找到为什么我需要2条陈述,请详细说明:)

贾卜

所以,我的问题的答案:

var duplicates = 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()
                        .Where(g => g.Count > 1)
                        .Select(g => new SomeClass() { Var1 = g.Var1, Var2 = g.Var2, Var3 = g.Var3})
                        .ToList();

似乎有点矫kill过正,我觉得它可能会更小,所以如果有人愿意对此发表评论...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

来自分类Dev

LINQ查询从SQL转换,SQL使用包含GROUP BY和COUNT的子查询

来自分类Dev

具有GROUP BY和汇总功能的多个INNER JOIN

来自分类Dev

具有JOIN和GROUP BY SQL查询的Django COUNT

来自分类Dev

父表上具有WHERE和GROUP BY的多个JOIN

来自分类Dev

CakePHP 1.3.x find('count')具有与SQL等效的'contains','group','order'和'limit'语句

来自分类Dev

LINQ to Sql左外部与Group By并具有子句的联接

来自分类Dev

使用GROUP BY和COUNT优化/重写LINQ查询

来自分类Dev

具有多个GROUPING SETS,CUBE和ROLLUP子句的GROUP BY

来自分类Dev

具有JOIN,GROUP,SUM()的LINQ并返回新的SELECT

来自分类Dev

具有内部联接和分组的Linq

来自分类Dev

LINQ group by和writerecords

来自分类Dev

Linq和group by子句

来自分类Dev

使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

来自分类Dev

LINQ查询从SQL转换,SQL使用包含GROUP BY和COUNT的子查询

来自分类Dev

通过LINQ迭代到包含COUNT和GROUP BY的SQL查询

来自分类Dev

父表上具有WHERE和GROUP BY的多个JOIN

来自分类Dev

具有LINQ和委托约束的WeakEventHandler

来自分类Dev

具有SUM,GROUP BY和JOIN的SQL聚合(多对多)

来自分类Dev

MySQL全外部联接3个表,具有group by和count

来自分类Dev

具有select,where,count和distinct的C#LINQ Lambda查询

来自分类Dev

GROUP_CONCAT具有排序字段和缺失字段

来自分类Dev

在多个字段SUM和COUNT上使用GROUP BY的Linq查询

来自分类Dev

具有多个参数的GROUP BY和COUNT

来自分类Dev

具有group-btn和group-addon的输入组

来自分类Dev

LINQ IQueryable with group by 和 count

来自分类Dev

具有多个 SELECT 和 GROUP BY 的 MySQL

来自分类Dev

有条件的 COUNT 和 GROUP BY?

来自分类Dev

具有 GROUP BY 和 JOIN 的 TIMEDIFF 的平均值

Related 相关文章

  1. 1

    使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

  2. 2

    LINQ查询从SQL转换,SQL使用包含GROUP BY和COUNT的子查询

  3. 3

    具有GROUP BY和汇总功能的多个INNER JOIN

  4. 4

    具有JOIN和GROUP BY SQL查询的Django COUNT

  5. 5

    父表上具有WHERE和GROUP BY的多个JOIN

  6. 6

    CakePHP 1.3.x find('count')具有与SQL等效的'contains','group','order'和'limit'语句

  7. 7

    LINQ to Sql左外部与Group By并具有子句的联接

  8. 8

    使用GROUP BY和COUNT优化/重写LINQ查询

  9. 9

    具有多个GROUPING SETS,CUBE和ROLLUP子句的GROUP BY

  10. 10

    具有JOIN,GROUP,SUM()的LINQ并返回新的SELECT

  11. 11

    具有内部联接和分组的Linq

  12. 12

    LINQ group by和writerecords

  13. 13

    Linq和group by子句

  14. 14

    使用linq group by从具有DateTime属性的对象列表到具有间隔StartDate,EndDate的列表

  15. 15

    LINQ查询从SQL转换,SQL使用包含GROUP BY和COUNT的子查询

  16. 16

    通过LINQ迭代到包含COUNT和GROUP BY的SQL查询

  17. 17

    父表上具有WHERE和GROUP BY的多个JOIN

  18. 18

    具有LINQ和委托约束的WeakEventHandler

  19. 19

    具有SUM,GROUP BY和JOIN的SQL聚合(多对多)

  20. 20

    MySQL全外部联接3个表,具有group by和count

  21. 21

    具有select,where,count和distinct的C#LINQ Lambda查询

  22. 22

    GROUP_CONCAT具有排序字段和缺失字段

  23. 23

    在多个字段SUM和COUNT上使用GROUP BY的Linq查询

  24. 24

    具有多个参数的GROUP BY和COUNT

  25. 25

    具有group-btn和group-addon的输入组

  26. 26

    LINQ IQueryable with group by 和 count

  27. 27

    具有多个 SELECT 和 GROUP BY 的 MySQL

  28. 28

    有条件的 COUNT 和 GROUP BY?

  29. 29

    具有 GROUP BY 和 JOIN 的 TIMEDIFF 的平均值

热门标签

归档