当右侧列表为空时,左联接 LINQ
本文关键字:LINQ 列表 | 更新日期: 2023-09-27 18:33:20
pdlist = (from a in context.EMPLOYEES
join b in context.PERSONS on a.PERSON_ID equals b.PERSON_ID
where a.SUPERVISOR_ID == empId
select new Pollidut.Models.Pollidut
{
PollidutId = a.EMPLOYEE_ID,
PollidutName = b.PERSON_NAME,
DistributionHouseId = a.DISTRIBUTION_HOUSE_ID == null ? 0 : (int)a.DISTRIBUTION_HOUSE_ID
}).ToList();
DateTime dt = DateTime.Now.Date;
var pdTargets = (from p in context.PALLYDUT_TARGET
where p.Active == true && p.StartDate <= dt && p.EndDate >= dt
group p by p.PallydutId into g
select new
{
PollidutId = g.Key,
Start = g.Select(x => x.StartDate).Min(),
End = g.Select(y => y.EndDate).Max(),
Target = g.Select(z => z.Target).Sum()
}).ToList();
var PdTargetsList = (from m in pdlist
join n in pdTargets on m.PollidutId equals n.PollidutId into t
from l in t.DefaultIfEmpty()
select new
{
PallydutId = m.PollidutId,
PallydutName = m.PollidutName,
DistributionId = m.DistributionHouseId,
StartDate = l.Start == null ? dt : l.Start,
EndDate = l.End == null ? dt : l.End,
Target = l.Target == null ? 0 : l.Target
}).ToList();
pdlist
是员工列表,pdTarget 可以设置或不设置。 pdTarget
可以为空。当我离开 pdlist 与 pdTargets 时,我得到对象引用未设置错误。pdTargets 集合返回空值。如何解决它。任何人都帮助我非常感谢。
我怀疑您获得Null reference exception
的原因是因为您直接访问 null 对象上的属性(在您的情况下l
),即使您使用的是 DefaultIfEmpty()
方法,如果未找到匹配的行,该方法将返回 null。你应该像这样更改你的代码:-
select new
{
PallydutId = m.PollidutId,
PallydutName = m.PollidutName,
DistributionId = m.DistributionHouseId,
StartDate = l == null ? dt : l.Start,
EndDate = l == null ? dt : l.End,
Target = l == null ? 0 : l.Target
}).ToList();
另外,如果您认为您的一个对象pdTarget
可以为 null,那么我认为它与左连接或普通连接无关,您的代码在任何一种情况下都会引发异常。请查看此 MSDN 文档以处理查询表达式中的空值。