我一直得到一个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。
任何其他建议将不胜感激。
由于 马林
答案 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 };