2012-06-25 51 views
2

的选择财产一直收到ArgumentNullException“值不能为空参数名:内。”有以下LINQ: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 = P之前铸造PaValue到可为空的小数即PaValue =(十进制?)p.PaValue

  • 测试p表示空!= NULL? p.PaValue:(十进制)0

  • 使用的SingleOrDefault

    (应该只有一个),而不是DefaultIfEmpty

  • 在paymentAdjustments做嵌套查询,而不是加入...成即PaValue =(从对 其中p.VoId == v.VoId 选择p.PaValue).DefaultIfEmpty()

我使用C#2010 Express和.NET 4

任何OT她的建议将不胜感激。

感谢 马林

+0

您的查询看起来不错。你能告诉我们更多关于“代金券”和“支付调整”吗?他们只是集合?如果是这样,你能提供类型定义吗? – Enigmativity

+0

你们每个人都解决了这个问题吗? –

回答

2

我知道这是旧的,但任何人寻找答案,要加入的两个对象之一为null。先做这件事。

如果(代金券!= NULL & & payAdjustments!= NULL) ...

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 };