2 回答

TA贡献1871条经验 获得超13个赞
像这样的事情会起作用:
var list = new List<List<Foo>>();
list.Add(new List<Foo> {new Foo {A = 1, B = 2}, new Foo {A = 1, B = 3}});
list.Add(new List<Foo> {new Foo {A = 1, B = 2}});
var result = list.SelectMany(l => l)
.GroupBy(l => new {l.A, l.B})
.Select(grp => new {A = grp.Key.A, B = grp.Key.B, Count = grp.Count()});
首先列表被扁平化SelectMany()。之后,我们GroupBy通过使用匿名对象多个值。分组后,我们选择初始值和分组中的计数到一个匿名对象中。
您似乎希望将结果序列化。使用Json.Net,这将是输出:
[
{
"A":1,
"B":2,
"Count":2
},
{
"A":1,
"B":3,
"Count":1
}
]

TA贡献1890条经验 获得超9个赞
您必须展平您的第一个列表,因为嵌套级别与您想要的结果无关。这显示了如何展平。我认为您的 GroupBy 是正确的。
List<List<Foo>> list = new List<List<Foo>>();
list.Add(new List<Foo>());
list[0].Add(new Foo { a = 1, b = 2 });
list[0].Add(new Foo { a = 1, b = 3 });
var subList = new List<Foo>();
subList.Add(new Foo { a = 1, b = 2 });
list.Add(subList);
var flat = list.SelectMany(i => i);
var grouped = from foo in flat group foo by new { foo.a, foo.b } into g select g;
Assert.AreEqual(true, grouped.First().Count() == 2);
Assert.AreEqual(true, grouped.Last().Count() == 1);
- 2 回答
- 0 关注
- 251 浏览
添加回答
举报