流暢な(つまり「メソッド」)構文を使用してネストされたGroupBy LINQ式を書き込もうとしています。ネストされたGroupBy LINQの流暢構文の使用
ここで私のクラスとデータです:
class Person
{
public String ZipCode, Gender, Name;
}
private static List<Person> people = new List<Person>
{
new Person { ZipCode= "11111", Gender = "M", Name = "Tom" },
new Person { ZipCode= "11111", Gender = "M", Name = "Bob" },
new Person { ZipCode= "11111", Gender = "F", Name = "Nancy" },
new Person { ZipCode= "11111", Gender = "F", Name = "Lisa" },
new Person { ZipCode= "22222", Gender = "M", Name = "Dan" },
new Person { ZipCode= "33333", Gender = "F", Name = "Mary" },
new Person { ZipCode= "44444", Gender = "F", Name = "Joan" },
new Person { ZipCode= "44444", Gender = "F", Name = "Jane" },
new Person { ZipCode= "44444", Gender = "M", Name = "Bill" }
};
私が達成したいと思ってる何がZipCode
内Gender
によって、その後ZipCode
によってグループ化されたオブジェクトです。オブジェクト型の面では、私はこれを探しています:
IEnumerable<IGrouping<string, IEnumerable<IGrouping<string, Person>>>>
これは、その後、私はこのようなクエリ結果にアクセスできるようになる。ここでも
foreach(var byZip in mainQuery) {
Console.WriteLine(byZip.Key); // print the ZipCode
foreach(var byGender in byZip) {
Console.WriteLine(byGender.Key) // print the Gender
foreach (Person p in byGender)
Console.WriteLine(p.Name);
}
}
を、私は流暢な表記を使用していますよ。下記のジェフの答えに基づいて
、これは、クエリとアクセスです:
IEnumerable<IGrouping<string, IEnumerable<IGrouping<string, Person>>>> query =
people
.GroupBy(p => p.ZipCode)
.GroupBy(
keySelector: g => g.Key,
elementSelector: g => g.GroupBy(p => p.Gender)
);
foreach (IGrouping<string, IEnumerable<IGrouping<string, Person>>> byZip in query)
{
Console.WriteLine(byZip.Key); // print the ZipCode
foreach (IEnumerable<IGrouping<string, Person>> byGender in byZip)
{
foreach (IGrouping<string, Person> t in byGender)
{
Console.WriteLine(t.Key); // print the Gender
foreach (Person y in t)
Console.WriteLine(y.Name);
}
}
}
直感的なスーパーカウンター(私はいつもパターンをやった直後に何があったのか忘れています)が働いています。クール:) –