【问题标题】:Foreign key to values using Linq使用 Linq 的值的外键
【发布时间】:2013-04-25 12:22:25
【问题描述】:

我有一个使用 Linq 的网页和站点。该页面包含一个显示客户并受列表(客户)约束的网格视图。

我使用下面的代码来获得一个客户

    Public Function GetCustById(ByVal id As Integer) As Customer Implements ICustomerService.GetCustById
        Return DataContext.Customers.SingleOrDefault(Function(c) c.Id = id)
    End Function

然后我通过将所有客户 ID 传递到方法中将其绑定到我的 gridview。这会显示我需要的所有行,但我有一个问题。

一些作为外键的列显示为 1,2 等,通常我过去在不同项目上克服这个问题的方法是在数据层的 SQL 查询中添加一个子查询,但正如你猜到的那样这是 Linq,所以我不确定为了让外键使用 Linq 显示为值,什么是/不可能的?

我对 Linq 有点陌生,因此感谢任何可以帮助我的帮助或文章。

谢谢

【问题讨论】:

  • 你的问题不清楚。
  • Linq 可以连接,用它们来连接两个表。
  • Erm.... 使用 Linq 获取要显示为值的外键?所以我想知道是否有办法让上面的代码包含外键的值(就像在 tableadapter 中编写子查询时可以做的那样)
  • 您能给我们看一个 SQL 示例吗?
  • SELECT Name, Address, Age, GenderID From Customer WHERE CustomerID=@CustomerID // 这将获取 Gender 为 FK 的所有客户信息。这是子查询 (SELECT GenderValue From Genders Where Customer.GenderID = Genders.ID) As GenderValue

标签: c# asp.net sql vb.net linq-to-sql


【解决方案1】:

建议将视图与实体类(或领域类,如果您愿意)分开。因此,您将定义一个视图模型类,例如 CustomerViewModel,并将您的 Customer 投影到其中。

我不确定您如何获取客户列表(通过 ID 获取每个客户的效率非常低),但在某处会有IEnumerable<Customer>。我们称之为customers。现在你可以做

From c in customers_
Select New CustomerViewModel With { Name = c.Name, ... }

但是现在您可以向CustomerViewModel 添加不在Customer 中的属性!比如

Select New CustomerViewModel
       With { Name = c.Name, TypeName = c.CustomerType.Name }

CustomerType 可能是您要显示的外键之一。

投影的结果是您可以在网格中显示的IEnumerable<CustomerViewModel>

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多