2010-01-28 43 views
4

我有列的一组数据,如下面组通过任一柱,使用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's报告。我需要做出报告,我需要通过RO来显示分组,无论这个人是RO1还是RO2或RO3,都是干事.John是干事A的RO1和干事B的RO2,所以当通过约翰分组RO被分组时,我希望两名官员A & B被选中。对于Carl来说,名字是RO3,对于官员B是RO3,对于官员D是RO2,所以当由Ro根据Carl进行分组时,两个官员B &D被挑选。

因此,对于上述数据时由RO的分组我想要得到的结果是为

RO OffName 
John  A 
     B 
Jack  A 
Rob  A 
     C 
Earl  B 
Carl  B 
     D 
Chris C 
Kenny C 
Rodney D 
Jacob D 

任何帮助将b极

谢谢。

+0

你想分组或排序吗?你谈论分组,但你想要的结果表明没有分组,而是排序。 – 2010-01-28 10:22:41

+0

你在结果中有两次'约翰B',可能是一个错误。那是LINQ到SQL? linq的对象? – Kobi 2010-01-28 10:23:15

+0

Hi Mark&Kobe, 感谢您的回复。我已经修改了上面的问题,并更正了错误。希望我的问题现在已经清楚。 非常感谢 – san9541 2010-01-29 03:04:38

回答

1

最简单的方法可能是"flatten"问题,然后通过做组:

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<Officer>其中

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 
+0

嗨贾森, 感谢您的解决方案,并为延迟答复道歉。如何在不使用lambda表达式的情况下执行上述操作?任何建议都会很棒。 Thannks – san9541 2010-02-17 01:59:03