csharp group by issue

时间:2016-11-29 14:38:15

标签: c#

大家好我对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,并为我提供每个邮政编码中的预订量。如何获得设备数量?

1 个答案:

答案 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())