2010-01-28 4 views
4

J'ai un ensemble de données avec des colonnes telles que ci-dessousde groupe en colonne en utilisant C# LINQ

OffName,RO1,RO2,RO3 

Pour expliquer plus j'utiliser des données d'échantillons comme ci-dessous:

OffName RO1 RO2 RO3 
A  John Jack Rob 
B  Earl John Carl 
C  Rob Chris Kenny 
D  Rodney Carl Jacob 

RO signifie agent de rapports . Chaque officier rapporte jusqu'à 3 RO. Je dois faire un rapport où je dois montrer un groupement par RO indépendamment de la personne est RO1 ou RO2 ou RO3 pour l'officier .. John est RO1 pour l'agent A et RO2 pour l'agent B, donc quand groupé par RO sous John je veux que l'officier A & B soit choisi.C'est pour Carl est RO3 pour l'officier B et RO2 pour l'officier D ainsi quand groupé par Ro sous Carl l'agent B & D à cueillir ..

donc, pour les données ci-dessus lorsqu'ils sont regroupés par RO de je veux que le résultat soit comme

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

Toute aide serait b grande

Merci.

+0

Voulez-vous le groupement ou le tri? Vous parlez de regroupement, mais votre résultat souhaité n'indique aucun regroupement, mais plutôt un tri. –

+0

Vous avez 'John B' deux fois dans les résultats, probablement une erreur. Est-ce linq à sql? linq aux objets? – Kobi

+0

Salut Mark & ​​Kobe, Merci pour vos réponses. J'ai modifié la question ci-dessus avec plus de détails et j'ai corrigé des erreurs. J'espère que ma question est claire maintenant. Merci beaucoup – san9541

Répondre

1

Le plus simple est probablement "flatten" le problème, puis faire le groupe par:

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

Ici, je suppose officers est un IEnumerable<Officer>

class Officer { 
    public string Name { get; set; } 
    public string ReportingOfficer1 { get; set; } 
    public string ReportingOfficer2 { get; set; } 
    public string ReportingOfficer3 { get; set; } 
} 

Avec vos données d'échantillon ceci est ma sortie:

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

Salut Jason, Merci pour votre solution et vous excuser pour la réponse tardive. Comment faire ce qui précède sans utiliser l'expression lambda? Tout conseil serait bon. Thannks – san9541

Questions connexes