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

cicna 2013-12-12 10:23:45
我用的数据库是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、




...全文
10358 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2014-01-21
  • 打赏
  • 举报
回复
linq 用到 oracle 上感觉用错了吧
q107770540 2013-12-12
  • 打赏
  • 举报
回复
1. 针对左表: 因为左表不可能为空 Remark = string.IsNullOrEmpty(role.Remark) ? "" : role.Remark, 2. 针对右表: 而右表数据有可能为NULL: UserId = (pro2!=null && pro2.userOrg!=null)?pro2.userOrg.UserId : "",

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧