2010-01-28 44 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