LINQ-Query-Problem-Sequenz enthält keine Elemente
Ich versuche zu aktualisieren, einen einzelnen Datensatz in einer Tabelle, aber wenn ich .Firstordefault()
bekomme ich den Fehler: "der Objektverweis nicht auf eine Instanz eines Objekts.", und wenn es mit .First()
, bekomme ich "Sequenz enthält keine Elemente".
Verwenden Sie einen anderen Ort, seine arbeiten gut, aber dieses mal seine Fehler verursacht.
Hier der code:
public class AllownceDetails
{
public int ta_id{get;set;}
public int tvrid{get;set;}
public DateTime ofDate{get;set;}
public string status{get;set;}
public string userid {get;set;}
}
//Update Method
public void Update(AllownceDetails Allowncedtl)
{
var ta = (from a in ce.tbl_tvrallownce
where a.tvrid == Allowncedtl.tvrid
//error: Sequence contains no elements
select a).SingleOrDefault();
ta.status = Allowncedtl.status;
//error:Object reference not set to an instance of an object
ce.SaveChanges();
}
weil es null zurückgeben, das ist, warum die Erste() gibt Fehler und SingleOrDefault den Wert null zurück, wenn kein Datensatz in dem Fall bekommen Sie der Objektverweis wurde nicht in der next-Anweisung. So stellen Sie sicher, dass Sie einige Zeilen in db gegen Allowncedt1.tvrid
Dieser Fehler ist Ihnen zu sagen es ist kein Datensatz den Kriterien entspricht ".tvrid == Allowncedtl.tvrid".
Mögliche Duplikate von " Sequenz enthält keine Elemente?
Dieser Fehler ist Ihnen zu sagen es ist kein Datensatz den Kriterien entspricht ".tvrid == Allowncedtl.tvrid".
Mögliche Duplikate von " Sequenz enthält keine Elemente?
InformationsquelleAutor Naveed | 2012-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Muss die Abfrage nicht wieder alle Daten. Ausführen von profiler-auf der SQL-Datenbank, um den physischen Abfrage wird ausgeführt, und Sie versuchen, führen Sie es manuell auf der Datenbank zu sehen, wie die Daten Aussehen. Vermutlich haben Sie zum anpassen der Abfrage (oder die Daten), um die Ergebnisse, die Sie suchen.
"Sequenz enthält keine Elemente" ist im Grunde LINQ die Möglichkeit, Ihnen zu sagen, dass Sie versuchen, eine Referenz zu einem element aus einer Liste, die nicht alles haben. So fordert Sie auf Dinge wie
.First()
oder.Single()
kann nichts finden, daher der Fehler.Wenn Sie ändern die Aufrufe so etwas wie
.FirstOrDefault()
oder.SingleOrDefault()
dann geht es mit "default" - Wert für diesen Typ, und für Referenz-Typen der Standard istnull
. Also wenn Ihr etwas zunull
und dann versuchen, rufen Sie eine Methode auf, erhalten Sieobject reference not set to an instance of an object
.Was ist weiterhin das problem? Funktioniert die Abfrage Ergebnisse zurückgibt?
InformationsquelleAutor David
Den Single Methode löst diese Ausnahme aus, wenn es keine Elemente in der Liste(Abfrage) oder es sind mehrere Elemente.
Den SingleOrDefault - Methode löst eine Ausnahme aus, wenn mehrere Elemente in der Liste. Gibt null zurück, wenn keine Elemente.
Den FirstOrDefault Methode das erste Element in der Liste oder null. Es gibt keine Ausnahmen.
Verwenden Sie es, und überprüfen Sie die Referenz für die null -
Die Quelle wird immer ein Objekt sein, so dass keine sorgen über es in Ihrem Fall.
Sie haben keine Belege für diese Kriterien.
InformationsquelleAutor Adrian Iftode
Alles, was bedeutet, dass Ihre Abfrage ist nicht passend, nichts. Vermutlich
Allowncedtl.tvrid
ist eine ID, die nicht mit in der Datenbank nichts. Sie sollte nicht davon ausgehen, dassSingleOrDefault
gibt einen nicht-null-Wert. Verwenden Sie nurSingleOrDefault
wenn Sie erwartet, dass es keine Werte - und fertig. Wenn ein Fehler zu finden, einen Wert weist auf einen Fehler, sollten SieSingle
(oder vielleichtFirst
) statt.Können wir nicht sagen, nichts darüber, was die zugrunde liegenden Ursache des Fehlers ist - Sie sollten die log-ID, die Sie gesucht haben, arbeiten aus warum Sie waren auf der Suche für Sie, und dann überprüfen Sie es in der Datenbank.
InformationsquelleAutor Jon Skeet