2011-01-25 66 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