加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用lambda表达式的多个Left Outer Join

发布时间:2020-12-15 05:41:31 所属栏目:百科 来源:网络整理
导读:我有一个SQL查询与这样的Lambda表达式,通常有比这个例子更多的连接. select Table2.a,Table2.b,Table2.c,Table2.d from Table1 LEFT OUTER JOIN Table2 ON Table2.a = Table1.a and Table2.b = Table1.b and Table2.c = Table1.c LEFT OUTER JOIN Table3 ON
我有一个SQL查询与这样的Lambda表达式,通常有比这个例子更多的连接.
select Table2.a,Table2.b,Table2.c,Table2.d
   from Table1
     LEFT OUTER JOIN Table2
     ON Table2.a = Table1.a and
        Table2.b = Table1.b and
        Table2.c = Table1.c 
     LEFT OUTER JOIN Table3
     ON Table3.b = Table1.b AND
        Table3.c = Table1.c AND
        Table3.d = Table1.d 
   where ( Table1.a = ValueA )
   order by Table3.f

我正在使用Join()Lambda Expression执行此操作,但我在SQL Server分析器中看到,这会生成一个INNER JOIN,我需要一个LEFT OUTER JOIN.

这是我用Join()做的

var RS = DBContext.Table1.Join(DBContext.Table2,Table1 => new {Table1.a,Table1.b,Table1.c},Table2 => new {Table1.a,(Table1,Table2) => new {Table1})
.Join(DBContext.Table3,LastJoin => new {LastJoin.Table1.b,LastJoin.Table1.c,LastJoin.Table1.d},Table3 => new {Table3.b,Table3.c,Table3.d},(LastJoin,Table3) => new {LastJoin.Table1,Table3})
.Where (LastTable => LastTable.Table1.a == ValueA)
.OrderBy(LastTable => LastTable.Table3.f)
.Select (LastTable => new {LastTable.Table1,LastTable.Table3});

我一直在读它可以使用DefaultIfEmpty()或GroupJoin()完成,但我没有找到任何具有多个LEFT OUTER JOIN的复杂示例.

解决方法

为什么不尝试使用linq查询,与lambda表达式相比,编写和理解它们也容易得多.我有这样的实现,如:
var products = 
        from p in this.Products
        from cat in this.ProductCategoryProducts
        .Where(c => c.ProductID == p.ProductID).DefaultIfEmpty()

        from pc in this.ProductCategories 
        .Where(pc => ac.ProductCategoryID == cat.ProductCategoryID).DefaultIfEmpty()

        where p.ProductID == productID
        select new
        {
            ProductID = p.ProductID,Heading = p.Heading,Category = pc.ProductCategory
        };
    return products ;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读