大家好我对Linq有疑问。
我将结果分组到客户邮政编码上。对于每个邮政编码,我想查看预订金额和订购的设备数量。
到目前为止,我的代码看起来像这样:
var statistics = from b in db.Bookings
from c in db.Customers
where b.customerID == c.id
group c by c.zipcode into stat
select new {
Zipcode = stat.Key,
NumberOfBookings = stat.Count()
};
此代码将结果分组为zipcodes,并为我提供每个邮政编码中的预订量。如何获得设备数量?
答案 0 :(得分:2)
您可以(并且最好)使用模型中的导航属性,而不是在SQL中使用join
:
var statistics =
from b in db.Bookings
group b by b.Customer.zipcode into g
select new
{
Zipcode = g.Key,
NumberOfBookings = g.Count(),
NumberOfEquipments = g.SelectMany(b => b.Equipments).Count(),
};
请注意,g
变量代表一组具有相同邮政编码的预订,因此在应用Count
运算符之前,SelectMany
用于获取所有相关设备。
当然,这不是唯一的方法,例如,您可以使用Sum
代替:
NumberOfEquipments = g.Sum(b => b.Equipments.Count())