2009-12-08 13 views
70

Co jest potrzebne do korekcji przykładzie 2 Inorder do grupy przez wielu kolumnGrupa LINQ przez wielu dziedzinach -Syntax pomóc

Przykład 1

var query = from cm in cust 
      group cm by new { cm.Customer, cm.OrderDate } into cms 
      select 
      new 
      { Key1 = cms.Key.Customer,Key2=cms.Key.OrderDate,Count=cms.Count() }; 

Przykład 2 (niepoprawne)

var qry = 
    cust.GroupBy(p => p.Customer, q => q.OrderDate, (k1, k2, group) => 
    new { Key1 = k1, Key2 = k2, Count = group.Count() }); 

Odpowiedz

127

Użyj tego samego anonimowego typu w e kropka zapis, że robisz w wyrażeniu kwerendy:

var qry = cust.GroupBy(cm => new { cm.Customer, cm.OrderDate }, 
      (key, group) => new { Key1 = key.Customer, Key2 = key.OrderDate, 
            Count = group.Count() }); 

(W prawdziwym IDE Musiałbym (key, group) kolejce pod parametrem cm, ale wtedy byłoby zawinąć w SO.)

+0

Jona, ja zawsze popełniam błąd przy korzystaniu z metody rozszerzenia, czy jest jakiś łatwy sposób na zapoznanie się z? – Udana

+0

@Udana: Zauważyłem, że bardzo pomocne jest sprawdzenie, co robi kompilator C# z wyrażeniami zapytań - ale jestem facetem opartym na specyfikacji. Patrząc na przeciążenia dostępne i czytanie dokumentacji również bardzo pomaga :) –

+0

@ Jon Skeet: To przeciążenie 'GroupBy()' nie ma wiele opisu w MSDN. Czy możesz napisać o tym linię? – FMFF