-4
ID  kidID   grandKidID
1   3           7
1   3           8
1   4           9
2   5           10
2   6           11

1 と 2 の 2 人がいます (ID 列の下)。Mr 1 には 2 人の子供 3 と 4 がいます (KidID 列)。彼ら自身に子供がいます (grandKidID 列)

これらの3世代の人々のみを検討しているとしましょう。40年代にIDとして生まれた人々、70年代に生まれた人は、子供や人々が2000年以降に孫として生まれました。

メモリ内の上記のようなリストの場合、ID のリストを取得する LINQ クエリを作成したいと思います。ID のすべての子と、その子には自分の子が含まれます。

LINQでこれを行うにはどうすればよいですか? 私が書くクエリはあまりにも退屈に思えます。

4

3 に答える 3

3
var results = people
    .SelectMany(p => p.Kids
        .SelectMany(c => c.Kids
            .Select(g => new { 
                ID = p.ID, 
                KidID = c.ID, 
                GrandKidID = g.ID
             })));
于 2013-01-10T18:58:26.097 に答える
1

ID と KidID でグループ化

var result = data.GroupBy (x => new { ID = x.ID, KidID = x.KidID }).Select( x=> x.Key).ToArray();
于 2013-01-10T18:57:47.020 に答える
1

ID でグループ化し、KidID、GrandKidID を新しい Person に抽出します。キッズについても同じ手順を繰り返します。

class Person {
  public int ID {get; set; }
  public List<Person> Kids {get; set; }
}

List<Person> = snafuPersons
     .GroupBy(person => person.ID)
     .Select(group => new Person {
        ID = group.Key,
        Kids = group.GroupBy(kid => kid.KidID)
                .Select(kidGroup => new Person{
                   ID = kidGroup.Key,
                   Kids = kidGroup.Select(grandKid => 
                                     new Person { ID = grandKid.GrandKidID})
                                  .ToList()
                }).ToList()
      }).ToList;
于 2013-01-10T19:13:02.883 に答える