2011-01-25 65 views
2

假设我有一个Employee表。每个员工都有一个唯一的ID。表中的一列是ManagerId,它对应于另一个员工。将一个员工的数据绑定到一个GridView时,我想显示管理者的名字,而不是他们的ID。如果我有一个Mangers的查找表,我可以做<%# Eval("lu_Managers.ManagerName") %>,但是我没有这样的表格,我也不想每次添加或删除一个新的管理者时,都要对其进行跟踪/更新。Asp .Net LINQ to SQL数据绑定,做一个“查找”没有查找表?

目前在OnRowDataBound我打电话e.Row.Cells[1].Text = getFullNameFromEmployeeId(Convert.ToInt32(e.Row.Cells[1].Text));这似乎相当凌乱给我。

有没有办法做到这一点,而不使用代码隐藏?或者那会比现在低效吗?

回答

1

您需要重新加入Employee表的经理

SELECT 
    Employee.*, 
    Manager.FirstName As ManagerName 
FROM 
    tblEmployee As Employee 
    JOIN tblEmployee As Manager 
    ON Employee.ManagerID = Manager.pkEmployeeID 

编辑: 可以很容易地转换为LINQ:

var q = 
from employee in db.tblEmployee 
join manager in db.tblEmployee 
    on employee.ManagerID equals manager.pkEmployeeID 
select new 
{ 
    Employee = employee, 
    ManagerName = manager.FirstName 
}; 
0

好的,如果有一个一元关系设置?如果一个关系Employee有一个指向该经理的Employee属性,那么你可以引用Employee.EmployeeName。否则,如果没有明确的导航属性,您将不得不使用代码隐藏查询。

HTH。

+0

我从Employee.ManagerID创造了FK Employee.EmployeeId(PK)。但是,我如何在我的Eval声明中使用它? <%#Eval(“ManagerID.FirstName”)%>返回错误,这是合理的,因为Int32“ManagerID”没有“FirstName”属性。 – Marcus 2011-01-25 17:31:16

+0

使用新的管理器属性(或任何称为它的SQLMETAL) – 2011-01-25 21:50:49