2017-03-15 36 views
1

我遇到了导致异常的linq查询的问题。我知道为什么会发生异常,但我不确定重写查询的最佳方式是什么。如果可能的话,我想保留在linq中,但是如果这是更好的方法,我不反对使用循环和空对象检测。Linq未将对象引用设置为对象实例 - 内部集合null

这里是我的查询 - 问题是AnalysisResults有时为空(不是简单的空实例化集合)。也就是说,前任集合也可以为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(); 

有没有一个简洁的方法来解决null AnalysisResults

+0

改变你的对象不返回null,但实际空结果。这正是为什么当预期收集时不应该返回null的原因。 –

回答

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(); 
+0

混合两种Linq语法虽然有点讨厌。 – DavidG

+0

对,让我来修复它 – octavioccl

+0

酷,这是有效的 - 我从来没有使用'where'子句,除了底部之前,很高兴看到在这种情况下如何工作。 –

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(); 
相关问题