我遇到了导致异常的linq
查询问题。 我知道为什么会发生异常,但我不确定重写查询的最佳方法是什么。 如果可能的话,我想把它放在linq
,但如果这是更好的方法,我不反对使用循环和空对象检测。
这是我的查询 - 问题是AnalysisResults
有时为 null(而不仅仅是一个空的实例化集合)。 也就是说,前置集合也可能为 null,因此我更喜欢一种可以应用于所有集合的方法。
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();
有没有一种简洁的方法来解决空AnalysisResults
?
是的,使用Where
过滤null
的情况:
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();
您可以添加一些where
子句来检查空
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();