在LINQ-to-Entities中使用两个表(一对多关系)上的连接仅选择第一个匹配项

时间:2011-08-25 13:08:39

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

我正在使用LINQ到实体,需要使用带连接的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}

问题在于,因为我有一个 一对多 关系,所以我得到多行,其中我的地址表中有多个具有相同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  

我想只为我的地址表中的每个CustomerID带回第一个匹配。

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

任何想法?

1 个答案:

答案 0 :(得分: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 
                            });