请求将指定关联分组排序的SQL查询语句转换为LINQ语句
转换后的LINQ语句
没问题,我帮你把这条SQL转换成对应的LINQ语句,先明确原查询的核心逻辑:关联新闻表和评论表,按新闻的所有字段分组,统计每条新闻的评论数量并倒序排列,最终取评论最多的前5条新闻。
方法语法(Method Syntax)
这种写法偏向链式调用,适合习惯函数式编程的场景:
var top5News = db.Tbl_News .Join(db.Tbl_Comments, news => news.Id, comment => comment.News_Id, (news, comment) => new { News = news, Comment = comment }) .GroupBy(joined => joined.News) .OrderByDescending(group => group.Count()) .Take(5) .Select(group => group.Key);
查询语法(Query Syntax)
这种写法和原SQL结构更接近,可读性更强:
var top5News = (from news in db.Tbl_News join comment in db.Tbl_Comments on news.Id equals comment.News_Id group news by news into newsGroup orderby newsGroup.Count() descending select newsGroup.Key) .Take(5);
更简洁的写法(利用EF导航属性)
如果你的实体类已经配置了导航属性(比如Tbl_News里有一个ICollection<Tbl_Comments> Comments的集合属性,EF通过外键关联自动映射),那可以省去手动Join的步骤,写法会更简洁:
var top5News = db.Tbl_News .OrderByDescending(news => news.Comments.Count()) .Take(5);
EF会自动帮你生成和原SQL等价的关联查询,不需要手动处理Join逻辑。
内容的提问来源于stack exchange,提问作者Hesam Mahmoodi
相关产品推荐
相关产品推荐

