当前位置:编程学习 > C#/ASP.NET >>

关于linq的left join的null值处理问题

我用的数据库是oracle 11g
Entity Framework 6.0
C# 4.0

在写一个left join时
由于左右两边的表的字段可能都存在null时,发现两个疑问?
疑问1: 左边的role的字段可能有空值时,只能用string.Empty,而不能用""字符串?

疑问2: 右边的userInfo的字段可能有空值时,只能用""字符串,而不能用string.Empty?
经测试多次,用了以下办法解决,不知道还有哪种办法解决,望分享。

代码:

var obj = from role in entityContext.sysRole
                      join userInfo in
                          (from userOrg in VUsesOrg
                           join roleUser in entityContext.sysRoleUser
                           on userOrg.UserId equals roleUser.UserId into result
                           from result2 in result.DefaultIfEmpty()
                           select new { result2, userOrg })
                          on role.RoleId equals userInfo.result2.RoleId into pro
                      from pro2 in pro.DefaultIfEmpty()
                      select new V_RoleUserEntity
                      {
                          RoleId = role.RoleId ?? string.Empty,
                          RoleName = role.RoleName ?? string.Empty,
                          Remark = role.Remark ?? string.Empty,
                          IsVaild = role.IsVaild  == null ? 0  : role.IsVaild,
                          IsManager = role.IsManager  == null ? 0 : role.IsManager,
                          RUpdateName = role.UpdateName ?? string.Empty,
                          RUpdateTime = role.UpdateTime ?? DateTime.MinValue,
                          ParentRoleId = role.ParentRoleId ?? string.Empty,
                          IdFullPath = role.IdFullPath ?? string.Empty,
                          NameFullPath = role.NameFullPath ?? string.Empty,
                          CreateAccountname = role.CreateAccountName ?? string.Empty,
                          CreatTime = role.CreatTime ?? DateTime.MinValue,
                          UserRelationId = (pro2.result2.Gid == null ? "" : pro2.result2.Gid),
                          LastUpdatorId = pro2.result2.LastUpdatorId ?? "",
                          LastUpdatorName = pro2.result2.LastUpdatorName ?? "",
                          LastUpdateTime = pro2.result2.LastUpdateTime ?? DateTime.MinValue,
                          UserId = pro2.userOrg.UserId ?? "",
                          SapId = pro2.userOrg.SapId ?? "",
                          AccountName = pro2.userOrg.AccountName ?? "",
                          ChsName = pro2.userOrg.ChsName ?? "",
                          AllPathName = pro2.userOrg.AllPathName ?? "",
                          AllPathId = pro2.userOrg.AllPathId ?? "",
                          ShortName = pro2.userOrg.ShortName ?? "",
                          OrgName = pro2.userOrg.OrgName ?? "",
                          OrgId = pro2.userOrg.OrgId ?? "",
                          EmailAddress = pro2.userOrg.EmailAddress ?? "",
                          ShowOrder = (pro2.userOrg.ShowOrder == null ? 0 : pro2.userOrg.ShowOrder) 
                      };



图解:
1、


2、




--------------------编程问答-------------------- 1. 针对左表:
 因为左表不可能为空
 Remark = string.IsNullOrEmpty(role.Remark) ? "" : role.Remark,

2. 针对右表:
而右表数据有可能为NULL:
  UserId = (pro2!=null && pro2.userOrg!=null)?pro2.userOrg.UserId : "",
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,