Linq实体框架选择具有聚合列的distinct
本文关键字:distinct 实体 框架 选择 Linq | 更新日期: 2023-09-27 18:26:13
假设我有usertable
和ordertable
。
usertable
的标准是,我将多次获得相同的用户。
如何在Linq中执行distinct
和sum()
?
在SQL中它是:
SELECT DISTINCT
u.Name, u.Phone, SUM(o.Amount)
FROM
User u
JOIN
Order o ON u.UserId = o.UserId
WHERE
u.Type = 1 OR u.External = 1
GROUP BY
Name, Phone
您可以使用GroupJoin
创建一个查询,为每个用户汇总订单金额:
var query = users
.Where(user => user.Type == 1 && user.External == 1)
.GroupJoin(
orders,
user => user.Id,
order => order.UserId,
(user, ordersForUser) => new {
user.Name,
user.Phone,
Amount = ordersForUser.Sum(order => order.Amount)
}
);
您建议的用户名和电话查询组。这个查询根据用户ID进行分组,我认为这是您真正想要的。如果两个不同的用户有相同的名字和电话,就会有区别。
例如。按照你的标准进行尝试。在示例中,Count将给出具有distinct的列的总和。
from l in logins
group l by l.Date into g
select new
{
Date = g.Key,
Count = (from l in g select l.Login).Distinct().Count()
};