我尝试翻译这个 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语句很好用,我试过了。
谢谢大家的帮助! :)
最佳答案
您需要对 dish
和 DishOnTable
别名进行分组,因为 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/