c# - 在实体中使用 SUM() 转换 SQL 语句

标签 c# sql linq entity-framework

我尝试翻译这个 SQL 代码:

SELECT w.Id, w.LastName, w.FirstName, SUM(d.Price*dt.Number) AS somme
FROM  Waiter w
INNER JOIN  Client c on w.Id = c.WaiterId
INNER JOIN  DisheOnTable dt on c.Id = dt.ClientId
INNER JOIN  Dishe d on dt.DisheId = d.Id
GROUP BY w.Id, w.LastName, w.FirstName
ORDER BY somme DESC;

在 Entity Framework 中。

我尝试过这样的事情

var query2 = (from w in db.Waiter
              join c in db.Client on w.Id equals c.WaiterId
              join dt in db.DisheOnTable on c.Id equals dt.ClientId
              join d in db.Dishe on dt.DisheId equals d.Id
              group w by new { w.Id, w.LastName, w.FirstName } into g
              //orderby g.Select() descending
              select new
              {
                  id = g.Key.Id,
                  lastname = g.Key.LastName,
                  firstname = g.Key.FirstName,
                  total = g.Sum(q => q.)
              });

但是我的总和不起作用(经过多次研究和尝试)并且我不知道如何乘以我的变量。

PS:SQL语句很好用,我试过了。

谢谢大家的帮助! :)

最佳答案

您需要对 dishDishOnTable 别名进行分组,因为 Price 位于 Dish 中Number 位于 DishOnTable 中:

group new{ d,dt} by new {w.Id, w.LastName, w.FirstName} into g

现在对您想要的列进行求和

 select new { 
             id = g.Key.Id, 
             lastname = g.Key.LastName, 
             firstname = g.Key.FirstName, 
             total = g.Sum(q => q.d.Price * q.dt.Number)
            }).OrderBy(x=>x.total)

关于c# - 在实体中使用 SUM() 转换 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301887/

相关文章:

sql - 使用 Go 检查 sqlite db 中是否存在值

sql - 创建表时 IDENTITY NOT NULL

c# - 如何找到 .Any() 的反义词

c# - Ajax 成功函数返回空数据

c# - Datagrid MVMVM WPF中的IsEnabled按钮

php - SQL Rand() 给出结果集但无法获取结果

c# - 有没有更好的方法来编写 new List<string> {"a", "b"}.Contains(str)?

c# - Thread.Join 与 Thread.State

C# 异步 Ping : How to avoid an out of memory exception?

c# - LINQ to XML 查询中的格式错误