使用Linq的值的外键

时间:2013-04-25 12:22:26

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

我有一个使用Linq的网页和网站。该页面包含一个gridview,它显示客户并由List(Of Customer)绑定。

我使用以下代码获取单个客户

    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有点新意,所以感谢任何帮助我的帮助或文章。

由于

1 个答案:

答案 0 :(得分: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>,您可以在网格中显示。