[英]Left join with where clause in linq
我正在嘗試使用linq中的where子句進行左連接。
我有2500行的LeadsQuery表。 我想將LeadCons表加入其中。 對於潛在客戶,LeadCons表中可以有多個條目,因此我只想在狀態匹配時加入。 否則,我希望這些字段為NULL。
var data = from lead in leadsQuery
join lcs in context.LeadCons on lead.ID equals lcs.LeadId into leadsWithCons
from lcs in leadsWithCons.DefaultIfEmpty()
where lead.Status == lcs.Status
select new
{
LeadId = lead.ID,
Source = lead.Source.ToString(),
};
該查詢給了我約1500行,LeadsQuery有2500行。我在這里做錯了什么?
答案很晚,希望對您有所幫助:
首先,您沒有從LeadCons
選擇任何值,那么LeadCons
的目的是什么? 我假設您可能要擴展選擇范圍,所以讓我們說您想選擇foo
屬性,所以我的下一個問題是:為什么您的情況需要左連接? 您可以簡單地進行選擇:
var data = from lead in leadsQuery
select new
{
Foo = context.LeadCons.Where(lcs => lead.Status == lcs.Status).SingleOrDefault().foo
LeadId = lead.ID,
Source = lead.Source.ToString(),
};
這樣,您就可以擁有相同數量的項目,並且對於每個項目都可以使用所需的foo
值。
您是否嘗試過僅將聯接更改為具有多個條件的聯接,然后刪除“狀態等於狀態”的地方
from lead in leadsQuery
join lcs in context.LeadCons on new {
p1 = lead.ID,
p2 = lead.Status
}
equals
new {
p1 = lcs.LeadId,
p2 = lcs.Status
}
您可以看一下這篇不錯的文章: https : //smehrozalam.wordpress.com/2010/04/13/linq-how-to-write-queries-with-complex-join-conditions/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.