Linq实体框架选择具有聚合列的distinct

本文关键字:distinct 实体 框架 选择 Linq | 更新日期: 2023-09-27 18:26:13

假设我有usertableordertable

usertable的标准是,我将多次获得相同的用户。

如何在Linq中执行distinctsum()

在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

Linq实体框架选择具有聚合列的distinct

您可以使用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() 
 };