在下面的LINQ查询中,我需要显示All
已下订单总数的客户,包括尚未下任何订单的客户:
型号:
Public class Customer
{
public int CustomerId { get; set; }
public string Name{ get; set; }
}
Public class Order
{
public int OrderId { get; set; }
public int CustomerId { get; set; }
}
LINQ查询:问题:如何显示ALL
客户(包括没有订单的客户)和每个客户的订单总数(对于那些客户ID不在“订单”表中的客户,该值为零)
var Query1 = from c in Customers
join o in Orders into co
from t in co.DefaultIfEmpty()
select new {CustomerID = c.CustomerId, OrderID = (t == null ? 0 : t.OrderId)};
基本上,您需要在“客户”表和“客户订单”表之间进行左联接,然后对结果进行分组以计算每个客户的订单。
假设您有一个这样的班级
public class CustomerOrder
{
public int CustomerId { set; get; }
public int? OrderId { set; get; }
}
此类用于存储左连接结果的每个项目
现在,您需要首先执行LEFT JOIN并将其结果投影到CustomerOrder
类对象列表中,然后在该对象之上执行GroupBy
var usersWithCount = (from c in db.Customers
join o in db.Orders on c.CustomerId equals o.CustomerId
into result
from sub in result.DefaultIfEmpty()
select new CustomerOrder{ OrderId= sub!=null ? sub.OrderId :(int?) null,
CustomerId = u.CustomerId }
) // Here we have the left join result.
.GroupBy(g => g.CustomerId , (k, orders) => new {
CustomerId = k,
OrderCount = orders.Count(t=>t.OrderId !=null)}).ToList();
存储的结果usersWithCount
将是带有CustomerId
和OrderCount
属性的匿名对象的集合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句