我遇到导致异常的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
?
答案 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();