将SQL转换为Linq查询

3

我是Linq查询的新手,我想将我的数据库查询转换为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。这似乎有些棘手。

有人可以帮我吗?

2个回答

15
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,谢谢您的回答,但我正在寻找Habib的答案中的Linq lambda表达式。无论如何,感谢您的快速回复。 - Ashok Damani

11
var result = db.Person
               .Where(r=> r.EnrollmentDate != null)
               .GroupBy(r=> r.EnrollmentDate)
               .Select( group=> new 
                              {
                                 EnrollmentDate = group.Key, 
                                 Count = group.Count()
                               });

谢谢您的回答,但我遇到了一个错误(xyzModel.SchoolContext不包含任何名为Person的定义)。问题已经更新,请再次查看。谢谢。 - Ashok Damani
@ashok_damani,你的模型中代表表格“Person”的类是什么?请在你的查询中替换它。 - Habib
您的答案已经修改,现在它可以正常工作了。但是还有一件事,我在这里写了 Select(group => new EnrollmentDateGroup()),但是之前我尝试将其转换为 List<EnrollmentDateGroup>(通过在末尾添加 ToList<EnrollmentDateGroup>()),但是没有成功,为什么? - Ashok Damani
@ashok_damani,我看不到你的编辑,但是你提出将其转换为List<EnrollmentDateGroup>的答案是不允许的,因为你正在使用new关键字选择一个匿名对象 - Habib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接