2017-03-15 4 views
1

Ich habe ein Problem mit einer linq Abfrage, die eine Ausnahme verursacht. Ich weiß, warum die Ausnahme passiert, aber ich bin mir nicht sicher, was der beste Weg, die Abfrage neu zu schreiben ist. Ich würde es gerne in linq wenn möglich, aber nicht gegen die Verwendung von Schleifen und Null-Objekterkennung, wenn das der bessere Ansatz ist.Linq Objektverweis nicht auf eine Instanz eines Objekts festgelegt - innere Sammlung null

Hier ist meine Abfrage - das Problem ist, dass AnalysisResults manchmal Null ist (nicht einfach eine leere instanziierte Sammlung). Es ist jedoch auch möglich, dass die Vorgänger-Sammlungen null sind. Daher würde ich einen Ansatz bevorzugen, der auf alle Sammlungen angewendet werden kann.

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

Gibt es eine prägnante Art und Weise AnalysisResults um die Null herum zu arbeiten?

+0

für null überprüfen Ändern Sie Ihre Objekte nicht null zurück, sondern eine tatsächliche leer Ergebnis. Aus diesem Grund sollten Sie nicht null zurückgeben, wenn eine Sammlung erwartet wird. –

Antwort

2

Ja, die Fälle, Filterung, wo ist null mit einem 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

Mischen beide Arten von Linq-Syntax ist jedoch ein bisschen böse, obwohl. – DavidG

+0

Richtig, lass es mich reparieren – octavioccl

+0

Cool, das funktioniert - ich habe nie die 'Where'-Klausel irgendwo anders als die untere verwendet, schön zu sehen, wie das in diesem Fall funktioniert. –

1

Sie können einige where Klauseln hinzufügen

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(); 
Verwandte Themen