在EF中實現左聯接
阿新 • • 發佈:2019-01-24
class chat lec his 連接 生成 als () empty
當使用EF中的dbset進行join操作的時候如果,如果表之間沒有關聯關系的話,生成的sql語句是 inner join(inner join 和 left join的區別 就不在這闡述了),eg:
var user = await (from u in this.context.MUser.Where(sa => sa.Id == pid) join uw in this.context.MUserWechat on u.Id equals uw.UserID select new MVUserBaseInfo { ID = u.Id, CreateTime = u.CreateTime, HeadImage = u.HeadImage, Phone = u.Phone, UserName = u.UserName, WechatBindStatus = uwti.WechatBindStatus, WechatSystem = uwti.WechatSystem, WechatUser = uwti.WechatUser, NickName = uwti.NickName ?? string.Empty }).FirstOrDefaultAsync();
這樣相當於就是將MUser和MUserWechat 進行了inner join, 如果我們希望進行左連接的話可以借助DefaultIfEmpty() 來達到當聯接的表為空的時候,生成一條空的數據,從而達到左聯接的效果,eg:
var user = await (from u in this.context.MUser.Where(sa => sa.Id == pid) join uw in this.context.MUserWechat on u.Id equals uw.UserID into uwt from uwti in uwt.DefaultIfEmpty() // 變成left join select new MVUserBaseInfo { ID = u.Id, CreateTime = u.CreateTime, HeadImage = u.HeadImage, Phone = u.Phone, UserName = u.UserName, WechatBindStatus = uwti.WechatBindStatus, WechatSystem = uwti.WechatSystem, WechatUser = uwti.WechatUser, NickName = uwti.NickName ?? string.Empty }).FirstOrDefaultAsync();
在EF中實現左聯接