2013-05-06 74 views
1

我必須加入多個表。這些表格對於每個表格都有類似的數據。LINQ奇怪的加入表

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 } 

這將引發錯誤「匿名類型不能有多個同名的屬性」

有沒有更好的方式加入這些表?我可以做Select new { d, f, pg }嗎?從那裏獲取數據很容易嗎?

我對LINQ很陌生,所以任何幫助表示讚賞。

回答

3

編譯器根據您使用的屬性創建匿名類型的屬性。在你的情況下,你使用屬性Name兩次。一旦在f.Name和一次在pg.Name
要解決它,你必須明確指定兩個屬性名稱中的至少一個:

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

你只需要給唯一的名稱爲兩個Name屬性。喜歡的東西:

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 } 

當你不指定自己的名字,編譯器將只使用屬性的全名,但因爲在這種情況下,他們都只是Name,它會產生一個錯誤。