为了账号安全,请及时绑定邮箱和手机立即绑定

如何从列表列表中进行 LINQ Select、GroupBy 和 Count?

如何从列表列表中进行 LINQ Select、GroupBy 和 Count?

C#
绝地无双 2021-12-25 18:37:18
我有一个 List<IEnumerable<Foo>>这使得列表如下:{    [      {a: 1, b: 2},      {a: 1, b: 3}    ],    [{a: 1, b: 2}]}我需要以这种方式排列它,按 a 和 b 值对对象进行分组。我无法对以下示例进行组查询。{   {a: 1, b: 2, count: 2},   {a: 1, b: 3, count: 1}} 编辑:这是我拥有的代码和输出:var list = new List<object>();foreach (var f in fooList){    var x = from y in f            group y by new { y.a, y.b } into z            select new            {                Foo = z.Key,                Count = z.Count()            };    a.Add(x);}输出:[  {     "Foo": {         "a": 1,         "b": 2     },     "count": 1  },  {     "Foo": {         "a": 1,         "b": 2     },     "count": 1  },  {     "Foo": {         "a": 1,         "b": 3     },     "count": 1  }],
查看完整描述

2 回答

?
慕桂英4014372

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

   }

]


查看完整回答
反对 回复 2021-12-25
?
当年话下

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);


查看完整回答
反对 回复 2021-12-25
  • 2 回答
  • 0 关注
  • 251 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号