ID kidID grandKidID
1 3 7
1 3 8
1 4 9
2 5 10
2 6 11
有两个人1和2(在ID列下)。 1先生有两个孩子3和4.(KidID专栏)。他们自己有自己的孩子(grandKidID专栏)
让我们说我们只考虑这三代人。出生于40年代的人作为身份证,70年代出生的孩子和2000年出生的人为大孩子。
对于上面的列表如内存,我想写一个LINQ查询给我一个ID列表,所有孩子和孩子都会有自己的孩子。
如何在LINQ中执行此操作?我写的查询似乎太乏味了。
答案 0 :(得分:3)
var results = people
.SelectMany(p => p.Kids
.SelectMany(c => c.Kids
.Select(g => new {
ID = p.ID,
KidID = c.ID,
GrandKidID = g.ID
})));
答案 1 :(得分:1)
按ID分组,以及KidID
var result = data.GroupBy (x => new { ID = x.ID, KidID = x.KidID }).Select( x=> x.Key).ToArray();
答案 2 :(得分: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;