如何在Lambda LINQ表达式中进行LEFT JOIN

Ser*_*gey 5 c# linq entity-framework

如何将此表达式设为LEFT JOIN

var query = order.Items.Join(productNonCriticalityList,
    i => i.ProductID,
    p => p.ProductID,
    (i, p) => i);
Run Code Online (Sandbox Code Playgroud)

Mag*_*nus 18

这是使用lambda表达式编写它的更复杂的方法:

order.Items
   .GroupJoin (
      productNonCriticalityList, 
      i => i.ProductID, 
      p => p.ProductID, 
      (i, g) => 
         new  
         {
            i = i, 
            g = g
         }
   )
   .SelectMany (
      temp => temp.g.DefaultIfEmpty(), 
      (temp, p) => 
         new  
         {
            i = temp.i, 
            p = p
         }
   )
Run Code Online (Sandbox Code Playgroud)


Tim*_*out 7

我建议切换到from语法,你可以使用into关键字.

它与方法语法的作用相同,并且更具可读性(IMO).

(from l1 in myFirstDataSet
join l2 in mySecondDataSet on l1.<join_val> equals l2.<join_val> into leftJ
from lj in leftJ.DefaultIfEmpty()
where <your_where_clause>
select <something>).ToList();
Run Code Online (Sandbox Code Playgroud)

  • @Sergey两种不同风格的表达式做同样的事情.没有必要偏爱一方而不是另一方.对于左连接,这是更可读的imo. (3认同)