webentwicklung-frage-antwort-db.com.de

Wie lade ich mit LINQ nur den letzten Datensatz einer Entität?

Ich möchte den Wert des Feldes mit dem Namen "Gram" aus dem letzten Datensatz abrufen und seinen Wert in eine Variable einfügen, ohne Bedingungen zu verwenden.

Zuerst habe ich es versucht

int value = int.Parse(Entity.TblGold.LastOrDefault().Gram.ToString());

Zweitens habe ich es versucht

int value = int.Parse(Entity.TblGold.Select(p => p.Gram).Last().ToString());

Ich erhalte gerade diese Ausnahme:

LINQ to Entities does not recognize the method 'DataModel.TblGold LastOrDefault[TblGold](System.Linq.IQueryable``1[DataModel.TblGold])' method, and this method cannot be translated into a store expression.

13
amin

Last oder LastOrDefault werden in LINQ to Entities nicht unterstützt. Sie können Ihre Abfrage entweder mit ToList oder ToArray durchlaufen und dann Last anwenden, oder Sie können die Reihenfolge absteigend festlegen und dann die First verwenden:

int value = int.Parse(Entity.TblGold
                            .OrderByDescending(p => p.Gram)
                            .Select(r => r.Gram)
                            .First().ToString());
35
Habib

Wenn die Liste richtig angeordnet ist, um das letzte Element zu packen, werde ich einfach die Liste umkehren und dann das erste (vorher letzte) Element auswählen:

var gram = int.Parse(Entity.TblGold.Reverse().First().Gram.ToString());
0
Bern

Sie können es nicht in einer Abfrage machen, aber Sie können es in zwei Abfragen.

var countOfRows = tbl.Count();

var lastRow = tbl.Skip(countOfRows - 1).FirstOrDefault();
0
Garrison Neely