211 Stimmen

Die Sequenz enthält keine Elemente?

Ich verwende derzeit eine einzige Abfrage an zwei Stellen, um eine Zeile aus einer Datenbank abzurufen.

BlogPost post = (from p in dc.BlogPosts
                 where p.BlogPostID == ID
                 select p).Single();

Die Abfrage ist in Ordnung, wenn sie die Zeile abruft, um Daten in die Textfelder einzugeben, aber sie gibt eine Fehlermeldung "Sequence contains no elements" zurück, wenn sie verwendet wird, um die Zeile abzurufen, um sie zu bearbeiten und sie wieder in die Datenbank einzugeben. Ich kann nicht verstehen, warum es in einem Fall eine passende Zeile findet, in einem anderen aber nicht.

(Mit ASP.NET MVC und LINQ)

24 Stimmen

Sie müssen SingleOrDefault verwenden, da es null zurückgibt, wenn keine Elemente zurückgegeben werden.

0 Stimmen

Die Fehlermeldung besagt, dass keine Elemente in dc.BlogPosts gefunden werden können, die dem Wert von ID entsprechen. Entweder hat ID keinen Wert oder die Elemente in Ihrer Liste enthalten dieses Element. Verwenden Sie SingleOrDefault oder FirstOrDefault, diese geben ein Null-Objekt zurück, wenn kein Element gefunden wurde, anstatt einen Fehler zu melden.

0 Stimmen

Es geht hier nicht darum, die Bedeutung von "Sequence contains no elements" zu erklären, wie viele anscheinend denken, sondern warum es vorkommt. Diese Frage kann nicht beantwortet werden, weil es an Details fehlt.

515voto

Tony Kiernan Punkte 4557

Von " LINQ-Fehler beheben: Sequenz enthält keine Elemente ":

Wenn Sie die LINQ-Fehlermeldung "Sequence contains no elements" erhalten, liegt das normalerweise daran, dass Sie die First() o Single() Befehl anstelle von FirstOrDefault() y SingleOrDefault() .

Dies kann auch durch die folgenden Befehle verursacht werden:

  • FirstAsync()
  • SingleAsync()
  • Last()
  • LastAsync()
  • Max()
  • Min()
  • Average()
  • Aggregate()

6 Stimmen

Perfekt! ctx.Rosters.First(c => c.RosterAccess == accCode); <-- gebrochen ctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode); <-- FUNKTIONIERT

6 Stimmen

In meinem Fall habe ich eine Max über eine leere Folge

1 Stimmen

Jetzt wissen wir also, dass jede Stimme (derzeit) 31,25 Pfund wiegt.

37voto

Josue Morales Punkte 641

Bitte verwenden Sie

.FirstOrDefault()

denn wenn in der ersten Zeile des Ergebnisses keine Info steht, geht diese Anweisung auf die Standardinfo.

3 Stimmen

Im Falle eines asynchronen Aufrufs verwenden Sie .FirstOrDefaultAsync();

16voto

bryc3monk3y Punkte 394

Zusätzlich zu allem anderen, was bereits gesagt wurde, können Sie anrufen DefaultIfEmpty() bevor Sie anrufen Single() . Dadurch wird sichergestellt, dass Ihre Sequenz etwas enthält und somit die InvalidOperationException "Sequence contains no elements" vermieden wird. Zum Beispiel:

BlogPost post = (from p in dc.BlogPosts
                 where p.BlogPostID == ID
                 select p).DefaultIfEmpty().Single();

13voto

Marc Gravell Punkte 970173

Nun, was ist ID hier? Handelt es sich insbesondere um eine lokale Variable? Es gibt einige Probleme mit dem Geltungsbereich bzw. der Erfassung, was bedeutet, dass es wünschenswert sein könnte, eine zweite Variablenkopie nur für die Abfrage zu verwenden:

var id = ID;
BlogPost post = (from p in dc.BlogPosts
                 where p.BlogPostID == id
                 select p).Single();

Außerdem: Wenn es sich um LINQ-to-SQL handelt, dann erhalten Sie in der aktuellen Version ein etwas besseres Verhalten, wenn Sie das Formular verwenden:

var id = ID;
BlogPost post = dc.BlogPosts.Single(p => p.BlogPostID == id);

0 Stimmen

ID ist eine GUID, die als Argument übergeben wird

10voto

Diganta Kumar Punkte 3569

Damit wird das Problem gelöst,

var blogPosts = (from p in dc.BlogPosts
             where p.BlogPostID == ID
             select p);
if(blogPosts.Any())
{
  var post = post.Single();
}

0 Stimmen

Hallo, wie kann ich lösen Fehler Sequenz enthält keine Elemente in meinem Fall, wenn es leer ist, können Sie meinen Fall überprüfen Sie bitte diesen Link: stackoverflow.com/questions/69621734/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X