linq left join - 左实体的select属性

时间:2012-06-25 11:16:13

标签: linq

我一直得到一个ArgumentNullException“Value不能为null。参数名称:inner”,带有以下linq:

var dataSource = (from v in vouchers
                  join payAdj in paymentAdjustments on v.VoId equals payAdj.VoId into pTemp
                  from p in pTemp.DefaultIfEmpty()
                  select new
                  {
                    VoId = v.VoId,
                    OpId = v.OpId,
                    PaValue = p.PaValue
                  });

优惠券和paymentAdjustments都是实体列表。

我已经阅读了很多关于此的帖子,我尝试的所有内容都会给我相同(或类似)的错误。

  • 将PaValue转换为可以为空的小数,即PaValue =(decimal?)p.PaValue

  • 在访问PaValue之前测试p为null,即PaValue = p!= null? p.PaValue :(十进制)0

  • 使用SingleOrDefault(应该只有一个)而不是DefaultIfEmpty

  • 执行嵌套选择而不是连接...进入,即PaValue =(来自payAdjustments中的p)                                                                其中p.VoId == v.VoId                                                                选择p.PaValue).DefaultIfEmpty()

我正在使用c#2010 Express和.Net 4。

任何其他建议将不胜感激。

由于 马林

2 个答案:

答案 0 :(得分:2)

我知道这是旧的,但对于任何寻找答案的人来说,你加入的两个对象中的一个是空的。先这样做。

if(vouchers!= null&& payAdjustments!= null)      ...

答案 1 :(得分:0)

var query = from case in dbEntity.Cases
            join Comm in dbEntity.Comms on case.log_id equals comm.CaseId into collection
            from subCase in collection.DefaultIfEmpty()
            select new { Case=case,Status= (subCase==null?null:subcase.Status };