【问题标题】:Asp .Net LINQ to SQL Databinding, do a "lookup" without a lookup table?Asp .Net LINQ to SQL Databinding,在没有查找表的情况下进行“查找”?
【发布时间】:2011-01-25 16:23:11
【问题描述】:

假设我有一个 Employee 表。每个员工都有一个唯一的 ID。表中的一列是 ManagerId,它对应于另一个 Employee。将员工的数据绑定到 GridView 时,我想显示经理的姓名,而不是他们的 ID。如果我有 Mangers 的查找表,我可以做 <%# Eval("lu_Managers.ManagerName") %>,但我没有这样的表,我也不想在每次添加或删除新经理时创建一个/跟踪它/更新它。

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

有没有办法在不使用代码隐藏的情况下做到这一点?还是会比我现在的效率低?

【问题讨论】:

    标签: asp.net linq linq-to-sql data-binding lookup


    【解决方案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
     };
    

    【讨论】:

    • 如果它不是 LINQ 问题的 SQL 示例,我会投票赞成(-:它是正确的答案......
    • 如果我在哪里使用直接 SQL,这可能会起作用,但我使用的是 LINQ to SQL DataContexts,因此不做任何选择。
    • Linq 或 SQL,几乎一样 ;-)
    • 啊,误会了。所以这不是不使用代码隐藏就可以完成的事情,也就是说我不能从 aspx 文件中做到这一点?
    • 您设置网格的数据源指定的查询,这可以在代码隐藏或在 ASPX 页面中完成(使用 LinqDataSource 控件)
    【解决方案2】:

    好的,如果有一元关系设置?如果是关系,Employee 将有一个指向该经理的 Employee 属性,因此您可以使用 Employee.EmployeeName 进行引用。否则,如果没有显式导航属性,您将不得不使用代码隐藏中的查询。

    HTH。

    【讨论】:

    • 我创建了一个从 Employee.ManagerID 到 Employee.EmployeeId(PK)的 FK。但是如何在我的 Eval 语句中使用它呢? 返回一个错误,这是有道理的,因为 Int32“ManagerID”没有“FirstName”属性。
    • 使用新的 Manager 属性(或任何 SQLMETAL 名称)
    • 是的,应该有 Manager 或 Employee 属性。
    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多