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

在这里,我假设officersIEnumerable在哪里

 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