我正在寻找关于如何在使用多个表的连接时获得第一条记录的最佳建议,如下所示。
我有三张桌子:
通常我会像这样加入他们:
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()
(如果这是不好的做法,请告诉我;)
我希望从每个潜在客户记录的地址表(例如,最大ID)中获取一个属性并投影到模型:
select new LeadGridModel
{
...
});
示例:
Lead Company | City | ZIP
==============================
Company 1 | Boston | 00000
Company 2 | Houston | 00001
答案 0 :(得分: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 }
这可能看起来很棘手,但你逐一理解它:
OrderByDescending
与Take(1)
结合使用时,我们会使用最大ID 请注意,由于SQL Server的限制,此模式会强制进行循环连接。对于小结果集,这通常不是问题。