繁体   English   中英

Linq实体框架选择与聚合列不同

[英]Linq Entity Framework select distinct with aggregate columns

说我有一个用户usertable和一个ordertable

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

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM