将 SQL 转换为 Linq 查询

Posted

技术标签:

【中文标题】将 SQL 转换为 Linq 查询【英文标题】:Convert SQL into Linq query 【发布时间】:2013-05-16 07:09:31 【问题描述】:

我是 Linq 查询的新手,我只想将我的 DB 查询转换为 Linq。

这是我的简单 SQL 查询:

var query = "SELECT EnrollmentDate, COUNT(*) AS StudentCount "
          + "FROM Person "
          + "WHERE EnrollmentDate IS NOT NULL "
          + "GROUP BY EnrollmentDate";

var data = db.Database.SqlQuery<EnrollmentDateGroup>(query);

工作正常,但怎么可能在 Linq 中编写此查询,我就是无法将 group by 语句转换为 Linq。转成 Linq 好像有点棘手。

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:
var query = from row in db.Person
            where row.EnrollmentDate != null
            group row by row.EnrollmentDate into grp
            select new 
                EnrollmentDate = grp.Key,
                Count = grp.Count()
            ;

【讨论】:

太酷了!!! @Marc Gravell,谢谢你的回答,但我正在寻找 lamda 表达式中的 Linq 作为 Habib 的答案。但无论如何thanx 4快速回复【参考方案2】:
var result = db.Person
               .Where(r=> r.EnrollmentDate != null)
               .GroupBy(r=> r.EnrollmentDate)
               .Select( group=> new 
                              
                                 EnrollmentDate = group.Key, 
                                 Count = group.Count()
                               );

【讨论】:

感谢您的回答,但我收到了error(xyzModel.SchoolContext does not contain any defenition for Person) 问题已更新...请再次查看。谢谢 @ashok_damani,在您的模型中代表您的表 Person 的类是什么?在您的查询中替换它 您的答案已编辑,现在可以正常工作了。但还有一件事,我在这里写Select( group=&gt; new EnrollmentDateGroup(),但和之前一样,我尝试将其转换为List&lt;EnrollmentDateGroup&gt;(通过在尾部添加ToList&lt;EnrollmentDateGroup&gt;()),但没有奏效,是吗? @ashok_damani,我看不到您的编辑,但是对于您将其转换为 List&lt;EnrollmentDateGroup&gt; 的答案是不允许的,因为您正在使用 new 关键字选择 anonymous object

以上是关于将 SQL 转换为 Linq 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何将 linq 查询转换为 SQL 查询?

将 SQL 子查询转换为 Linq 查询

协助将 SQL 查询转换为 LINQ 查询

将 SQL 原始查询转换为 Linq

将sql代码转换为linq(内连接查询)

将 SQL 转换为 LINQ 查询