2016-11-29 2 views
4

こんにちは、私はLinqについて質問があります。発行によるcsharpグループ

結果を顧客の郵便番号にグループ化します。各郵便番号について、予約された金額と注文された金額を確認したいと思います。

これまでのところ私のコードは次のようになります。

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() 
          }; 

このコードグループは、ジップコードになり、私に、各郵便番号での予約の量を与えます。どのように私はまた、機器の量を得る?

答えて

2

むしろSQLのようjoin Sを使用するよりも、あなたは(そしてそれが良いでしょう)あなたのモデルからナビゲーションプロパティを使用することができます。

g変数が同じでの予約のセットを表します。なお
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(), 
    }; 

郵便番号のため、Count演算子を適用する前に、すべての関連機器を取得するためにSelectManyが使用されます。例えば、唯一の方法はありません。もちろん、

あなたの代わりにSumを使用することができます。

NumberOfEquipments = g.Sum(b => b.Equipments.Count()) 
関連する問題