linq 多表连接 lambal left join

  public List<dynamic> test()
        {
            //linq写法
            //var query = from A in db.MQRS
            //            join B in db.CXMS on A.GCBH equals B.XMBH
            //            join C in db.XFBS on new { A.GCBH, A.XTType } equals new { C.GCBH, C.XTType }
            //            join D in db.SBMS on new { B.GCBH, Creator = "aaa" } equals new { D.GCBH, Creator=D.Creator } into tempD
            //            from D2 in tempD.DefaultIfEmpty()
            //            where A.XTType == 2
            //            select new  { A, D2,A.ZYKSSJ };

            //前台使用
            //Web.BLL.Web jyweb = new BLL.Web();
            //List<System.Dynamic.ExpandoObject> ls = jyweb.test().ToExpandoList();
            //foreach (dynamic item in ls)
            //{
            //    var aa = item.Creator;
            //}

            //lambal表达式写法
            var query = db.Set<MQR>().Join(db.Set<CXM>(), A => A.GCBH, B => B.XMBH, (A, B) => new { A, B })
                .Join(db.Set<XFB>(), G => new { G.A.GCBH, G.A.XTType }, C => new { C.GCBH, C.XTType },(G, C) => new { G, C })
                .LeftOuterJoin(db.Set<SBM>(), H => new { H.G.B.GCBH, Creator = "aaa" }, D => new { D.GCBH, Creator = D.Creator },
                (H, D) => new {  H.G.A.XMMC, H.G.A.ZYKSSJ,D.Creator });

            return query.OrderBy(c => c.ZYKSSJ).Skip(3).Take(5).Select(c => new { c.XMMC, c.ZYKSSJ,c.Creator }).ToList<dynamic>();
        }


操作的过程中 查询的网页


也可以tolist<object> ,用下面方法获取值          
            //IEnumerable<object> y = GetSpareInfoByCode();
            //foreach (var item in y)
            //{
            //    Console.Write(item.GetType().GetProperty("Key").GetValue(item, null));
            //    Console.Write(item.GetType().GetProperty("Count").GetValue(item, null));
            //}


group join 用法可以参考这个:
看了上面的连接后,应该发现group join 实际上不是leftjoin 个人查看生成的sql觉得是有区别的。

如图 上面一条语句是 left join 的原始语句 下面一条语句是group join 生成的语句 如果 left join 右边的表都只有一条记录 结果是一样的,如果右边的表有多条,结果就有问题。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值