:この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)}
};
意味的には同等のグループを検討するかどうか分かりませんが、* Why * Distinctのクエリフォームがないため、Answeredチェックマークが表示されます。 – comecme
@comecme:私の声明は、 'group by 'を使ったクエリは' Distinct'を使ったクエリと意味的に同じです。また、 'GroupBy(g => g).Select(g => g.Key)'は効果的に 'Distinct'であることに注意してください。これは、 'group by 'を使って' Distinct'を使ってクエリと意味的に同等のクエリを得ることができる理由です。 – jason