2010-10-12 2 views
1

J'ai un exemple de classe comme ceci:Besoin d'aide avec Linq

SampleClass 
{ 
    string code; 
    int id; 
    string name;  
} 

données valides pour la classe seraient:

SampleClass{code= "code1", id= 1, name= "name1"} 
SampleClass{code= "code1", id= 1, name= "name2"} 
SampleClass{code= "code2", id= 2, name= "name1"} 
SampleClass{code= "code2", id= 2, name= "name2"} 
SampleClass{code= "code2", id= 2, name= "name3"} 

Maintenant, la question est, à l'aide de LINQ, je dois créer une collection TestClass groupée sur le champ "id" de SampleClass.

la structure

TestClass est la suivante:

TestClass 
{ 
    string code;   
    List<string> names;  
} 

où "noms" est une liste de tous SampleClass "name" valeurs groupées par "id".

Sur la base des données d'échantillons de SampleClass ci-dessus, j'aurais 2 objets TestClass, un pour id = 1 et d'autres pour id = 2

Merci à l'avance

Répondre

3

OK, si vous avez un IEnumerable de SampleClasses appelé classes, essayez ceci:

 var testClasses = classes 
      .GroupBy(c => c.id) 
      .Select(grp => new TestClass 
      { 
       code = grp.First().code, 
       names = grp.Select(c => c.name).ToList() 
      }); 
+0

supprimé ma réponse - celle-ci ne fait la liste des noms plutôt qu'une liste de SampleClasses que la valeur de 'names'. –

+0

En effet, cette réponse est meilleure que la mienne, depuis que je suis mêlé chaîne extensions dénombrables et la syntaxe SQL. +1 ;-) – zerkms

+0

@zerkms: Pourquoi vous remercier monsieur/archets –

3
var result = from c in collection 
      group c by c.id into g 
      select new TestClass { 
             code = g.First().code, 
             names = g.Select(i => i.name).ToList() 
            }; 

ps: Je ne VS près de maintenant, et j'espère que je ne l'ai pas beaucoup d'erreurs :-) il

+0

Cela signifie que le TestClass.code est le SampleClass.id, plutôt que le SampleClass.code. Cette –

+0

presque fonctionne, sauf TestClass.names doit être une liste/dénombrable de SampleClass pas une liste de chaînes pour que cela fonctionne. –

+0

@Alastair Pitts: oui, merci pour la correction – zerkms

2

MSDN a quelques grands exemples de LINQ, y compris l'utilisation du regroupement pour faire exactement ce dont vous avez besoin. Vous pouvez trouver un exemple de faire quelque chose de semblable à ce que vous voulez here.