将 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=> new EnrollmentDateGroup()
,但和之前一样,我尝试将其转换为List<EnrollmentDateGroup>
(通过在尾部添加ToList<EnrollmentDateGroup>()
),但没有奏效,是吗?
@ashok_damani,我看不到您的编辑,但是对于您将其转换为 List<EnrollmentDateGroup>
的答案是不允许的,因为您正在使用 new
关键字选择 anonymous object以上是关于将 SQL 转换为 Linq 查询的主要内容,如果未能解决你的问题,请参考以下文章