Group By使用C#LINQ的任一列
我有一组数据,如下所示
OffName,RO1,RO2,RO3
为了进一步解释,我使用如下样本数据:
OffName RO1 RO2 RO3 A John Jack Rob B Earl John Carl C Rob Chris Kenny D Rodney Carl Jacob
RO代表报告官。 每个官员报告最多3个RO.i需要报告我需要显示RO的分组,无论该人员是RO1或RO2还是RO3。约翰是A级的RO1和B级的RO2,因此,当按照约翰逊的RO分组时,我希望A和B都被选中。对于B级官员来说,Carl是RO3,对于D级官员来说是RO2,所以当由Ro在Carl下分组时,B&D官员都将被选中。
因此,对于按RO分组的上述数据,我希望结果为
RO OffName John AB Jack A Rob AC Earl B Carl BD Chris C Kenny C Rodney D Jacob D
任何帮助都会很棒
谢谢。
最简单的方法可能是“压扁”问题,然后通过以下方式进行分组:
var query = officers.SelectMany( x => new[] { new { x.Name, RO = x.ReportingOfficer1 }, new { x.Name, RO = x.ReportingOfficer2 }, new { x.Name, RO = x.ReportingOfficer3 } } ); var grouped = query.GroupBy(y => y.RO); foreach (var group in grouped) { foreach (var item in group) { Console.WriteLine(String.Format("{0}: {1}", item.RO, item.Name)); } }
在这里,我假设officers
是IEnumerable
在哪里
class Officer { public string Name { get; set; } public string ReportingOfficer1 { get; set; } public string ReportingOfficer2 { get; set; } public string ReportingOfficer3 { get; set; } }
使用您的示例数据,这是我的输出:
John: A John: B Jack: A Rob: A Rob: C Earl: B Carl: B Carl: D Chris: C Kenny: C Rodney: D Jacob: D