2

我不断收到带有以下 linq 的 ArgumentNullException“值不能为空。参数名称:内部”:

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 =(来自paymentAdjustments中的p,其中p.VoId == v.VoId选择p.PaValue).DefaultIfEmpty()

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

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

谢谢马琳

4

2 回答 2

2

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

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

于 2013-02-22T18:24:31.640 回答
1
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 };
于 2013-04-16T11:20:12.050 回答