在实体框架 C# 中使用 Lambda 编写多个 Sum() SQL 查询
Posted
技术标签:
【中文标题】在实体框架 C# 中使用 Lambda 编写多个 Sum() SQL 查询【英文标题】:Write multiple Sum() SQL query using Lambda in Entity Framework C# 【发布时间】:2021-10-28 09:22:33 【问题描述】:下面是我希望转换为 Lambda 的 SQL 查询
SELECT
SUM("Rating" * "Rating") / SUM("Rating")
FROM
public."CustomerRating"
WHERE
"DriverId" = '232'
这是我的 C# 代码:
public double GetDriverAvgRating(string id)
var driver = _context.CustomerRating
.AsQueryable()
.Where(d => d.DriverId == id);
var avgDriverRating = // i need to perform that query here
return avgDriverRating;
【问题讨论】:
你有什么困难,这似乎是一个相当简单的练习。到目前为止你有任何代码吗?我必须说,这段代码的作者似乎忘记了如何计算一个数字 您是否设置了数据库上下文?另外,你真的需要一个开关盒吗?SELECT SUM(["Rating"]*["Rating"]) / SUM(["Rating"]) FROM public."CustomerRating"
似乎是您想要的。
谢谢约翰。我已经更新了上面的 C# 代码
你的 sql 没有 WHERE。你的 c# 有一个 Where。应该是哪个?
评分总是介于 1 和 5 之间的整数吗?
【参考方案1】:
我相信 EF 将能够正确地将其翻译为一个分组,例如
var driver = _context.CustomerRating
.Where(cr => cr.DriverId == id)
.GroupBy(cr => cr.DriverId, cr => cr.Rating)
.Select(g => g.Select(r => r * r).Sum() / g.Sum())
.First();
它可能在查询中有一些额外的绒毛(例如一个只产生一个组的分组),但我不认为它会对查询的整体性能/规划产生任何重大影响
【讨论】:
以上是关于在实体框架 C# 中使用 Lambda 编写多个 Sum() SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
IAuthenticationFilter 中的 C# Ninject Web API 异步查询导致实体框架中的多个操作错误