【问题标题】:Select only first matches using a join on two tables (one-to-many relationship) in LINQ-to-Entities在 LINQ-to-Entities 中使用连接两个表(一对多关系)仅选择第一个匹配项
【发布时间】:2011-08-25 13:08:39
【问题描述】:

我正在使用 LINQ-to-Entities,需要使用带有连接的 select 语句填充 ListView。

dim db as New EntityModel

Dim myList = From c in db.Customers.ToList
             Join a in db.Addresses.ToList On c.AddressID Equals a.AddressID
             Where c.CustomerID=1
             Select New With {.CustomerID = c.CustomerID
                              .CustomerName = c.CustomerName
                              .PhysicalAddress = a.PhysicalAddress}

问题在于,因为我有 一对多 关系,所以我得到多行,其中我的 Address 表中有多个具有相同 CustomerID 的记录.

         CustomerID      CustomerName     PhysicalAddress
         1               Joe              12 Oak Street
         1               Joe              37 Beech Street
         1               Joe              19 Palm Avenue
         2               Sabina           54 Rock Drive
         2               Sabina           134 Rodeo Drive  

我只想为我的 Address 表中的每个 CustomerID 带回 first 匹配项。

         CustomerID      CustomerName     PhysicalAddress
         1               Joe              12 Oak Street
         2               Sabina           54 Rock Drive

有什么想法吗?

【问题讨论】:

标签: wpf vb.net linq linq-to-entities


【解决方案1】:

您可以尝试使用 Fluent Linq 语法重新编写该脚本,添加 .FirstOrDefault(),

像这样:

var result = db.Customers.Select(
                       x => new 
                            { 
                                 CustomerName = x.Name, 
                                 PhysicalAdress = db.Adresses.Where(
                                      y => y.CustomerId == x.Id).FirstOrDefault().PhysicalAddress 
                            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2012-01-15
    相关资源
    最近更新 更多