Linq对象引用未设置为对象的实例 - 内部集合为null

时间:2017-03-15 22:21:03

标签: c# linq

我遇到导致异常的linq查询问题。我知道为什么会发生异常,但我不确定重写查询的最佳方法是什么。如果可能的话,我想将它保留在linq中,但如果这是更好的方法,我不反对使用循环和空对象检测。

这是我的查询 - 问题是AnalysisResults有时为空(不仅仅是一个空的实例化集合)。也就是说,前任集合也可能为空,所以我更喜欢可以应用于所有集合的方法。

benchmarks = (from p in cacheData.SiteSources
                              from q in p.SiteGroup.SiteGroupSites
                              from r in q.Site.AnalysisResults
                              where r.BufferTypeId == bufferTypeId &&
                              r.BufferValue == bufferValue
                              select r).ToList();

是否有一种简洁的方法来解决null AnalysisResults

2 个答案:

答案 0 :(得分:2)

是的,使用null

过滤Where benchmarks = (from p in cacheData.SiteSources from q in p.SiteGroup.SiteGroupSites where q.Site.AnalysisResults!=null from r in q.Site.AnalysisResults where r.BufferTypeId == bufferTypeId && r.BufferValue == bufferValue select r).ToList(); 的情况
$(..., ...)

答案 1 :(得分:1)

您可以添加一些where子句来检查null

benchmarks = (from p in cacheData.SiteSources
                          where p.SiteGroup.SiteGroupSites != null
                          from q in p.SiteGroup.SiteGroupSites
                          where q.Site.AnalysisResults != null
                          from r in q.Site.AnalysisResults
                          where r.BufferTypeId == bufferTypeId &&
                          r.BufferValue == bufferValue
                          select r).ToList();