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前面部分是左連的集合,里面的參數分別是右邊的集合、左邊集合的外鍵、右邊集合的主鍵、兩個集合的對象、查找的集合。
寫的不好,如果有何問題,大家可以一起討論,這個只是作為筆記使用而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM