首页 > 解决方案 > 在实体框架 C# 中使用 Lambda 编写多个 Sum() SQL 查询

问题描述

下面是我希望转换为 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;
}

标签: c#sqlentity-frameworklambda

解决方案


我相信 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();

它可能在查询中有一些额外的绒毛(例如一个只产生一个组的组),但我不认为它会对查询的整体性能/规划产生任何重大影响


推荐阅读