关于linq的left join的null值处理问题
我用的数据库是oracle 11gEntity 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