2

我正在寻找一些关于如何在使用多个表的连接时最好地获取第一条记录的建议,如下所示。

我有三张桌子:

  • Leads < - 这在结果中应该是唯一的
  • LeadAddresses(连接表)
  • 地址

通常我会像这样加入他们:

from t2
    in db.Leads
    .Where(o => t1.LeadId == o.Lead_ID)
from t4
    in db.LeadAddresses
    .Where(o => t2.Lead_ID == o.Lead_ID)
    .DefaultIfEmpty()
from t5
    in db.Addresses
    .Where(o => t4.Address_ID == o.Address_ID)
    .DefaultIfEmpty()

(如果这是不好的做法,请告诉我;)

我希望从Addresses表中获取每个潜在客户记录和项目到模型的属性(例如,具有最大 ID 的那个) :

select new LeadGridModel
        {
            ...
        });

例子:

Lead Company | City    | ZIP
==============================
Company 1    | Boston  | 00000
Company 2    | Houston | 00001
4

1 回答 1

3
from l in db.Leads
from a in l.LeadAddresses.Select(la => la.Address).OrderByDescending(a => a.ID).Take(1).DefaultIfEmpty()
select new { l, a }

这可能看起来很棘手,但是您会逐步理解它:

  1. OrderByDescending结合使用我们Take(1)取最大ID的地址
  2. 使用 DefaultIfEmpty 我们创建了一个左连接。

请注意,由于 SQL Server 的限制,此模式会强制执行循环连接。对于小的结果集,这通常不是问题。

于 2012-05-31T16:51:56.777 回答