linq left join - 选择左实体的属性

标签 linq

我不断收到 ArgumentNullException“值不能为空。参数名称: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 转换为可为 null 的小数,即 PaValue = (decimal?)p.PaValue

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

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

  • 进行嵌套选择而不是连接...,即 PaValue = (from p in paymentAdjustments 其中 p.Void == v.Void 选择 p.PaValue).DefaultIfEmpty()

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

如有任何其他建议,我们将不胜感激。

谢谢 马琳

最佳答案

我知道这已经过时了,但是对于任何寻找答案的人来说,您要加入的两个对象之一是空的。首先执行此操作。

if(优惠券!= null && payAdjustments!= null) ...

关于linq left join - 选择左实体的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11188307/

相关文章:

c# - 无法将匿名类型 #1[] 隐式转换为匿名类型 #2[]

c# - 使用 System.Linq 占用多少空间?

c# - Linq 中的多重嵌套分组

c# - 何时在 LINQtoObjects 上使用带有 lambda 的扩展方法来过滤集合?

c# - 在这种情况下,如何通过使用 lambda 或 linq 来避免使用嵌套的 foreach 语句?

c# - 带连接的 linq 查询

c# - List.Last() 和 List.Last<T>() 之间有什么显着区别吗?

c# - 等效的 lambda 值是多少?

c# - LINQ GroupBy 仅在键不为空时选择

c# - 选择同一列上的多个位置