簡體   English   中英

在linq中使用where子句進行左連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM