[英]Linq Entity Framework select distinct with aggregate columns
说我有一个用户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将给出具有不同的列的总和。
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()
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.