Ich verwende derzeit eine einzelne 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 die Zeile abgerufen wird, um Daten in die Textfelder einzufügen. Sie gibt jedoch den Fehler "Sequenz enthält keine Elemente" zurück, wenn sie zum Abrufen der Zeile verwendet wird, um sie zu bearbeiten und wieder in die Datenbank einzufügen. Ich kann nicht verstehen, warum in einer Instanz eine geeignete Zeile gefunden wird, in einer anderen jedoch nicht.
(Verwenden von ASP.NET MVC und LINQ)
Antworten:
Setzen Sie in beiden Fällen einen Haltepunkt in diese Zeile oder einen Debug.Print davor und sehen Sie, welche ID enthalten ist.
quelle
Aus " Behebung des LINQ-Fehlers: Sequenz enthält keine Elemente ":
Dies kann auch durch die folgenden Befehle verursacht werden:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
quelle
ctx.Rosters.First(c => c.RosterAccess == accCode);
<- gebrochenctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);
<- ARBEITETMax
über eine leere SequenzLastOrDefault()
dies auch diesen Fehler auslösen kann? Warum ? Ich dachte, der "OrDefault" war derBenutzen Sie bitte
denn wenn es in der ersten Zeile des Ergebnisses keine Informationen gibt, geht diese Anweisung zu den Standardinformationen.
quelle
Nun, was ist
ID
hier? Ist es insbesondere eine lokale Variable? Es gibt einige Probleme mit dem Umfang / der Erfassung, die bedeuten, dass es möglicherweise wünschenswert ist, eine zweite Variablenkopie nur für die Abfrage zu verwenden:Ebenfalls; Wenn dies LINQ-to-SQL ist, erhalten Sie in der aktuellen Version ein etwas besseres Verhalten, wenn Sie das folgende Formular verwenden:
quelle
Dies wird das Problem lösen,
quelle
Zusätzlich zu allem, was gesagt wurde, können Sie anrufen,
DefaultIfEmpty()
bevor Sie anrufenSingle()
. Dadurch wird sichergestellt, dass Ihre Sequenz etwas enthält, und dadurch wird die InvalidOperationException "Sequenz enthält keine Elemente" abgewendet. Beispielsweise:quelle
Grund für den Fehler:
Die Abfrage
from p in dc.BlogPosts where p.BlogPostID == ID select p
gibt eine Sequenz zurück.Single()
versucht, ein Element aus der in Schritt 1 zurückgegebenen Sequenz abzurufen.Gemäß der Ausnahme - Die in Schritt 1 zurückgegebene Sequenz enthält keine Elemente.
Single () versucht, ein Element aus der in Schritt 1 zurückgegebenen Sequenz abzurufen, das keine Elemente enthält.
Da
Single()
kein einzelnes Element aus der in Schritt 1 zurückgegebenen Sequenz abgerufen werden kann, wird ein Fehler ausgegeben.Fix:
Stellen Sie die Abfrage sicher
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
Gibt eine Sequenz mit mindestens einem Element zurück.
quelle
Ich hatte eine ähnliche Situation bei einer Funktion, die den Durchschnitt berechnet.
Beispiel:
Fall gelöst:
quelle