c# – csharp group by issue

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

最佳答案 您可以(并且最好)使用模型中的导航属性,而不是像在SQL中那样使用连接:

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())
点赞