2014-03-27 7 views

Antwort

19

SingleOrDefault gibt SINGLE Element oder null zurück, wenn kein Element gefunden wird. Wenn 2 Elemente in Ihrer Enumerable gefunden werden, wird die Ausnahme ausgelöst, die Sie sehen. Genau wie Highlander ... mit Single - es kann nur einen geben.

liefert das FIRST Element, das es findet, oder null, wenn kein Element gefunden wird. Wenn also zwei Elemente mit Ihrem Prädikat übereinstimmen, wird der zweite ignoriert.

Sie Unter der Annahme, egal, ob es mehrere Übereinstimmungen sind und Sie wollen nur die erste oder null, wenn keine Übereinstimmung gefunden wird ... dann wollen Sie wahrscheinlich die folgenden ...

Details rd = this.db.Details 
    .FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId); 

Beachten Sie, dass Beide Methoden geben nur ein Element zurück, das sich nur dadurch unterscheidet, was sie tun, nachdem sie eine Übereinstimmung gefunden haben. First stoppt den Blick auf diesen Punkt und gibt zurück, was es gefunden hat, überprüft Single den Rest der Liste, um sicherzustellen, dass es keine Übereinstimmungen mehr gibt. Der OrDefault Teil bestimmt, was zurückgegeben wird, wenn keine Übereinstimmung gefunden wird. SingleOrDefault oder FirstOrDefault gibt null zurück, wenn kein Wert gefunden wird, aber wenn Sie einfach Single oder First verwenden, dann MUSS es eine Übereinstimmung finden oder es wird eine Ausnahme ausgelöst.

EDIT: Guter Punkt Steve Seit First kehrt das erste Element, das Sie eine OrderBy verwenden, um brauchen kann das Element Sie wollen sicherstellen, dass zuerst in der Tat ist. Zum Beispiel ... Angenommen, Ihr Objekt hatte eine UpdateDate Eigenschaft und Sie das Objekt mit der neuesten UpdateDate wollten ...

Details rd = this.db.Details 
    .OrderByDescending(x => x.UpdateDate) 
    .FirstOrDefault(x => x.TId == Id && x.TypeId == TypeId); 
+0

Ich würde den Vorschlag der Möglichkeit hinzufügen, eine OrderBy – Steve

0

Falls Sie eine Liste haben, um die Liste zu IEnumerable Liste konvertieren, dann können Sie Verwenden Sie die FirstOrDefault-Methode

IEnumerable<BuyOnlineSearchdetails> details = new List<BuyOnlineSearchdetails>(); 

var FirstRow = details.FirstOrDefault(); 
      string Count = "0"; 
      if (FirstRow != null) 
      { 
       Count = FirstRow.TotalCount.ToString(); 
      } 
      else 
      { 
       Count = "0"; 
      } 
+0

Arbeitete für mich. –

Verwandte Themen