2010-08-20 5 views
0

Disons que j'ai deux entités:Linq2EF: Concat toutes les valeurs dans une autre table dans une chaîne

Physician 
Credentials 

Et un médecin peut avoir de nombreuses lettres de créance, comme le Dr Jones peut avoir MD, DO, MPH que les informations d'identification . J'ai donc besoin de générer un rapport via Linq qui concatène les informations d'identification en une seule chaîne. Par exemple:

from p in Physicians 
select 
{ 
    p.Name 
    p.Credentials (??? <- concatenated list of all credentials ?????) 
} 

J'ai joué avec « p.Credentials.Aggregate((a,b) => a.Abrev + ',' + b.Abrev) » sans résultat, mais je ne suis pas sûr d'avoir la syntaxe correcte.

Répondre

0

Uhm .... Je n'ai pas testé, mais vous pouvez essayer:

from p in Physicians 
select 
{ 
    p.Name, 
    String.Join(",", p.Credentials.Select<Credentials, string>(c=>c.Abrev).ToArray()) 
} 

Dans le Select, je pense que x doit être des titres de compétences, pas de vérification des pouvoirs ...

EDIT

Vous devez déplacer vos objets en mémoire, essayez d'ajouter ToList() avant de faire le Choisir

from p in Physicians.Include("Credentials").ToList() 
select new 
{ 
    p.Name, 
    Credentials = String.Join(",", p.Credentials.Select<Credentials, string>(c=>c.Abrev).ToArray()) 
} 
+0

Le problème est Linq2Entities ne permet pas String.Join car cela ne peut pas être exécuté sur SQL Server. – CodeGrue

+0

Vous avez raison! J'ai mis à jour ma réponse, essayez maintenant! – tanathos

+0

Avec Aggregate, votre synthax est similaire à .Aggregate ("", (a, b) => b.Abrev + "," + a) mais vous devez d'abord appliquer ToList(), car LinqToEntities ne semble pas prendre en charge Aggregate. – tanathos

Questions connexes