2013-05-06 5 views
1

Je dois joindre plusieurs tables. Les tables ont des données similaires pour chaque table.LINQ Bizarrerie avec tables jointes

ID 
(table id for FK) 
Name 
Description 
Owner 

from d in Departments 
join f in Functions on d.DepartmentID equals f.DepartmentID 
join pg in Processes on f.FunctionID equals pg.FunctionID 
select new { d.DepartmentID, f.Name, pg.Name } 

Ce génère une erreur « Un type anonyme ne peut pas avoir des propriétés multiples avec le même nom »

est-il une meilleure façon de joindre ces tables? Si je fais Select new { d, f, pg } Est-il facile de saisir les données de cela? Je suis très nouveau à LINQ, donc toute aide est appréciée.

Répondre

3

Le compilateur crée les propriétés du type anonyme en fonction de la propriété que vous utilisez. Dans votre cas, vous utilisez la propriété Name deux fois. Une fois dans f.Name et une fois dans pg.Name.
Pour résoudre ce problème, vous devez spécifier au moins l'un des deux noms de propriétés explicitement:

select new { d.DepartmentID, FunctionName = f.Name, ProcessName = pg.Name } 
3

Vous avez juste besoin de donner des noms uniques pour les deux propriétés Name. Quelque chose comme:

from d in Departments 
join f in Functions on d.DepartmentID equals f.DepartmentID 
join pg in Processes on f.FunctionID equals pg.FunctionID 
select new { d.DepartmentID, FName = f.Name, PGName = pg.Name } 

Lorsque vous ne spécifiez pas vos propres noms, le compilateur suffit d'utiliser le nom complet de la propriété, mais comme dans ce cas, ils sont tous deux à Name, il va générer une erreur.