2017-01-23 3 views
-1

Wie kann ich die Überprüfung für Any/null hier beseitigen?Wie kann man die Möglichkeit von Nullen aus IEnumerable resultset

public List<Incident> GetByServiceActivity(Guid serviceActivityGuid) 
    { 
     var result = from s in this._xrmServiceContext.ServiceAppointmentSet 
         join i in this._xrmServiceContext.IncidentSet on s.RegardingObjectId.Id equals i.Id 
         select i; 

     return result.Any() ? result.Distinct().ToList() : new List<Incident>(); 
    } 

Ich möchte in der Lage sein, dies bringen Sie einfach ein Ausdruck wie:

return from s in this._xrmServiceContext.ServiceAppointmentSet 
          join i in this._xrmServiceContext.IncidentSet on s.RegardingObjectId.Id equals i.Id 
          select i; 

Wie können wir eine leere implizit zurückkehren, anstatt für .Any zu überprüfen, mit()?

+1

'Select' gibt immer eine leere Enumerable zurück, wenn keine Ergebnismenge gefunden wird. So können Sie einfach 'zurückgeben (von s in xrmServiceContext.ServiceAppointmentSet Join ich in xrmServiceContext.IncidentSet auf s.RegardingObjectId.Id entspricht i.Id wählen Sie i) .ToList()' Oder ändern Sie Ihre Methode, um eine 'öffentliche IEnumerable zurückzugeben GetByServiceActivity (Guid serviceActivityGuid) ' – dynamicallyCRM

Antwort

5

Keine der LINQ-Methoden, die eine IEnumerable<T> zurück jemals einen null Wert zurück. Sie geben immer einen Nicht-Null-Wert IEnumerable oder IQueryable zurück. Die Reihenfolge, die es darstellt, kann leer sein, aber es wird nie null sein.

Für die Handhabung des leeren Gehäuses gibt es nichts zu handhaben. Sie können Distinct bei einer leeren Sequenz/Abfrage genauso gut wie bei einem nicht leeren aufrufen, und Sie können auch eine Liste aus einer leeren oder nicht leeren Sequenz mit ToList erstellen. Sie müssen überhaupt nicht nach etwas suchen.

+2

Außer natürlich für Methoden wie' FirstOrDefault', die eine einzelne Instanz oder Null/Null zurückgeben. –

+0

kann dies jemals sein null ?: var result = (von der Nummer in _cmContext.SrvLocationWarmLine wo String.Compare (number.CurrentWarmLine, startingRange, StringComparison.Ordinal)> = 0 && String.Compare (number.CurrentWarmLine, endingRange, StringComparison.Ordinal) <= 0 orderby number.CurrentWarmLine absteigend Wählen Sie new {Number = number.CurrentWarmLine}). FirstOrDefault(); –

+0

@MeggieLuski Ja, da es keine Sequenz zurückgibt, gibt es einen einzelnen Wert aus dieser Sequenz zurück. – Servy

Verwandte Themen