仅使用linq将表分组到一个字段

时间:2014-10-01 12:54:06

标签: c# sql sql-server linq

我在MSSQL服务器MDF文件中有7个字段的表,用于导入CSV文件,需要为它们生成少量报告。

我使用EF和linq从C#访问数据库。

是否可以,以及如何执行类似于这个mysql查询的linq查询?

SELECT f1, f2, f3, f4 FROM tbl
GROUP BY f1
HAVING COUNT(f1) > 10

我找到了SQL Server - GROUP BY on one column,但它是经典的SQL,作为初学者,我无法将其翻译为Linq。

任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:1)

如您引用的文章中所述,SQL的语法无效,因为并非选择列表中的所有元素都是GROUP BY子句的一部分。

如果您的意图如下:

SELECT f1, f2, f3, f4 FROM tbl
GROUP BY f1, f2, f3, f4
HAVING COUNT(f1) > 10

然后等效的LINQ是:

var result = tbl.GroupBy(a => new {a.f1, a.f2, a.f3, a.f4}).Where(grp => grp.Count() > 10).Select(group => group.Key);

或者

 var result = 
        from a in tbl 
        group a by new { a.f1, a.f2, a.f3, a.f4 } into grp 
        where grp.Count() > 10
        select grp.Key;