【问题标题】:How do I group a list using Linq如何使用 Linq 对列表进行分组
【发布时间】:2016-09-16 16:42:28
【问题描述】:

我的场景如下:

我有以下数据 -

ID、姓名、地点、位置、GroupID

1, samename, Grand Central, New York, 12
2, samename, Opera House, Sydney, 12
3, samename, Opera House, Sydney, 12
4, name2, Emirates, London, 13
5, name3, Opera House, Sydney, 14

我想把它输出为两个表

组 ID、名称

12, samename
13, name2
14, name3

GroupID、地点、位置

Grand Central, New York, 12
Opera House, Sydney, 12
Opera House, Sydney, 12
Emirates, London, 13
Opera House, Sydney, 14

这是我继承的非常糟糕的设计 - 我正在努力让它变得更好......而不破坏旧代码。

【问题讨论】:

  • 查看这篇关于从 iEnum 中选择多个项目的文章:stackoverflow.com/questions/1202981/…
  • 根据这些数据,这也可以通过简单地选择所需的列并执行Distinct来完成。

标签: c# .net database linq linq-to-entities


【解决方案1】:

您需要分两步完成,首先将它们分组到Name 和GroupID:

var result = list.GroupBy(x=>new {x.GroupID, x.Name})
                 .Select(g=> new { GroupID = g.Key.GroupID, Name = g.Key.Name});

在第二种情况下,将它们与其他三列(GroupID、Place 和 Location)分组:

var result = list.GroupBy(x=>new {x.GroupID, x.Location,x.Place})
                 .Select(g=> new 
                         { 
                           GroupID = g.Key.GroupID, 
                           Location = g.Key.Location, 
                           Place = x.Key.Place
                         });

【讨论】:

  • 我建议已经在 GroupBy 中给出属性的名称,然后只是给Select(g => g.Key)
  • 或者只是一个.Select(x => new { ... }).Distinct()
猜你喜欢
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多