2011-02-03 14 views
2

このLINQ式をメソッド構文からクエリ構文に変換できますか?私は同等のクエリ構文に、このLINQのメソッド式を変換しようとしている

var results1 = 
    logins.GroupBy(loginDate => loginDate.Date) 
     .Select(loginDates => new 
      { 
       Date = loginDates.Key, 
       Count = loginDates.Select(login => login.Name).Distinct().Count() 
      }); 

まず、私は同じ結果を提供している、この構文に来たが、実際には同じではありません。

var results2 = 
    from loginDate in logins 
    group loginDate by loginDate.Date 
    into loginDates 
    select new 
     { 
      Date = loginDates.Key, 
      Count = (from login in loginDates group login by login.Name).Count() 
     }; 

違いは、私は(それは同じ結果を提供していますが)個別のと同じではありませんこれは、ここgroup by文を使用しているということです。それで、私はこれを試しました:

var results3 = 
    from loginDate in logins 
    group loginDate by loginDate.Date 
    into loginDates 
    select new 
     { 
      Date = loginDates.Key, 
      Count = (from login in loginDates select login.Name).Distinct().Count() 
     }; 

しかし、このコードはもうかなりの方法構文を使用しています。

私の最後の例はあなたが得ることができる?または、より少ないメソッド構文とより多くのクエリ構文を使用してクエリを書き換えることは可能ですか?


loginsは、このように初期化されます。

var logins = new[] 
       { 
        new {Name = "james", Date = new DateTime(2011, 01, 01)}, 
        new {Name = "jamie", Date = new DateTime(2011, 01, 01)}, 
        new {Name = "alex", Date = new DateTime(2011, 01, 01)}, 
        new {Name = "james", Date = new DateTime(2011, 1, 1)}, 
        new {Name = "matt", Date = new DateTime(2011, 1, 2)}, 
        new {Name = "jamie", Date = new DateTime(2011, 1, 2)}, 
        new {Name = "alex", Date = new DateTime(2011, 1, 2)}, 
        new {Name = "james", Date = new DateTime(2011, 1, 2)}, 
        new {Name = "james", Date = new DateTime(2011, 1, 2)} 
       }; 

答えて

4

Distinctのためのクエリ形式は、(このpost理由についてを参照してください)ありません。 group byのクエリ構文は意味的には同等であり、クエリ形式で使用する場合は、これと同じです。

+0

意味的には同等のグループを検討するかどうか分かりませんが、* Why * Distinctのクエリフォームがないため、Answeredチェックマークが表示されます。 – comecme

+0

@comecme:私の声明は、 'group by 'を使ったクエリは' Distinct'を使ったクエリと意味的に同じです。また、 'GroupBy(g => g).Select(g => g.Key)'は効果的に 'Distinct'であることに注意してください。これは、 'group by 'を使って' Distinct'を使ってクエリと意味的に同等のクエリを得ることができる理由です。 – jason

1

afaik、LINQクエリ構文には、Distinct()相当はありません。 Count()Sum()などではありません。したがって、メソッド/クエリの構文を組み合わせたり、メソッドだけを使用する必要があります。

関連する問題