LINQ与连接表的怪异

时间:2013-05-06 15:55:05

标签: 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很新,所以感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

编译器根据您使用的属性创建匿名类型的属性。在您的情况下,您使用属性Name两次。进入f.Name后进入pg.Name 要修复它,您必须明确指定两个属性名称中的一个:

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

答案 1 :(得分: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,它将生成错误。