• Lambda表达式多表连接的左连


      在网上有很多人都在查找Lambda的例子,但是完整的例子不多,况且还有相当一部分几乎完全不能用,LINQ的左连倒是挺多的,但是LINQ的代码相对比较少,一旦遇到重复数据的时候,不容易被过滤,Lambda就可以轻松避免这个让人头疼的问题。废话不多说,看下面的例子吧。

                        var model_main = from o in db.Main where o.OrderIsdel == 0 select o;
                        var model_user = from u in db.User select u;
                        var model_device = from d in db.Device select d;
                        var model_team = from t in db.Team select t;
    					var sub_model = from sub in db.SubOrder select sub;
    
                        var model_order_user = model_main.GroupJoin(model_user, o => o.OrderUserId, u => u.UserId, (o, u) => new { o, u }).SelectMany(p => p.u.DefaultIfEmpty(), (p, u) => new OrderModel()
                        {
                            OrderDeviceId = p.o.OrderDeviceId,
                            OrderId = p.o.OrderId,
                            OrderUserId = p.o.OrderUserId,
                            OrderTeamID = p.o.OrderTeamID,
                            OrderUserNickName = u.UserName,
                        });
    
                        var model_order_user_device = model_order_user.GroupJoin(model_device, o => o.OrderDeviceId, d => d.DeviceId, (o, d) => new { o, d }).SelectMany(p => p.d.DefaultIfEmpty(), (p, d) => new OrderModel()
                        {
                            OrderDeviceId = p.o.OrderDeviceId,
                            OrderId = p.o.OrderId,
                            OrderUserId = p.o.OrderUserId,
                            OrderTeamID = p.o.OrderTeamID,
                            OrderUserNickName = p.o.OrderUserNickName,
                            DeviceName = d.DeviceName,
                            DeviceAddress = d.DeviceAddress,
                            DeviceZone = d.DeviceZone
                        });
    
                        var model_order_user_device_team = model_order_user_device.GroupJoin(model_team, o => o.OrderTeamID, t => t.TeamId, (o, t) => new { o, t }).SelectMany(p => p.t.DefaultIfEmpty(), (p, t) => new OrderModel()
                        {
                            OrderDeviceId = p.o.OrderDeviceId,
                            OrderId = p.o.OrderId,
                            OrderUserId = p.o.OrderUserId,
                            OrderTeamID = p.o.OrderTeamID,
                            OrderUserNickName = p.o.OrderUserNickName,
                            DeviceName = p.o.DeviceName,
                            DeviceAddress = p.o.DeviceAddress,
                            DeviceZone = p.o.DeviceZone,
                            TeamSerisNumber = t.TeamSerisNumber,
                        }); 
                        
                        var model = model_order_user_device_team.GroupJoin(sub_model, o => o.OrderId, s => s.SubOrderParentId, (o, s) => new { o, s }).SelectMany(p => p.s.DefaultIfEmpty(), (p, s) => new OrderModel()
                        {
                            OrderDeviceId = p.o.OrderDeviceId,
                            OrderId = p.o.OrderId,
                            OrderUserId = p.o.OrderUserId,
                            OrderTeamID = p.o.OrderTeamID,
                            OrderUserNickName = p.o.OrderUserNickName,
                            DeviceName = p.o.DeviceName,
                            DeviceAddress = p.o.DeviceAddress,
                            DeviceZone = p.o.DeviceZone,
                            GoodsCount = sub_model.Where(sub => sub.SubOrderParentId == p.o.OrderId).Sum(sub => sub.SubOrderGoodsNumber),
                            
                        });
    

      

    GroupJoin前面部分是左连的集合,里面的参数分别是右边的集合、左边集合的外键、右边集合的主键、两个集合的对象、查找的集合。
    写的不好,如果有何问题,大家可以一起讨论,这个只是作为笔记使用而已。
  • 相关阅读:
    yum只下载不安装
    知乎的 Flink 数据集成平台建设实践
    饿了么EMonitor演进史
    手机淘宝轻店业务 Serverless 研发模式升级实践
    独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless
    一文详解物化视图改写
    业务团队如何统一架构设计风格?
    Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩
    开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?
    Service Mesh 从“趋势”走向“无聊”
  • 原文地址:https://www.cnblogs.com/zunzunQ/p/11811285.html
Copyright © 2020-2023  润新知