Linq Ausnahme: die Funktion kann nur aufgerufen werden, die von linq to entities
Ich habe eine StudentReceipts
Tabelle, die speichert ReceiptNo
als string(001,002,003,..,099,..)
.
Ich will gehen, um den letzten receiptno details inorder, erhöhen Sie die receiptno für die nächste Transaktion.
Dies ist, was ich versucht habe
var _lastGeneratedRecDetails = _db.StudentReceipts
.AsEnumerable()
.Where(r => r.Status == true
&& EntityFunctions.TruncateTime(r.DueDate.Value) >= _startDate.Date
&& EntityFunctions.TruncateTime(r.DueDate.Value) <= _endDate.Date)
.OrderByDescending(x => Int32.Parse(x.ReceiptNo))
.FirstOrDefault();
Aber dort bin ich immer die folgende Ausnahme
diese Funktion kann nur aufgerufen werden, von der linq to entities -
Jede Hilfe wird sehr geschätzt werden.
Sie können gefälschte numerische Bestellung bei Bestellung durch die Länge und dann nach Wert. Keine Notwendigkeit für jede Konvertierung.
Durch
Nein, ich meine
Durch
Ordering by length
ich denke, du meintest Ordering by Id
.Wenn das der Fall ist funktioniert es nicht, weil es ist eine chance, die Letzte Zeile kann nicht die latest receiptno
Nein, ich meine
OrderByDescending(x => x.ReceiptNo.Length).ThenByDescending(x => x.ReceiptNo)
InformationsquelleAutor ksg | 2016-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch den Aufruf
.AsEnumerable()
Sie gehen von Linq-To-Entities, Linq-To-Object. Durch den Aufruf, Sie sind auch die Filterung aller Ergebnisse im Speicher, so Sie ziehen die ganzeStudentReceipts
Tabelle aus der Datenbank jedes mal, wenn Sie tun, dass die Abfrage-wie wird es durchgeführt Vergangenheit die.AsEnumerable()
Methode. Die Allgemeine Regel ist, zu versuchen, so viel wie Sie können auf der Datenbank-Seite:Wenn Sie es so machen, filtern Sie alles in der Datenbank und abrufen der gefilterten Ergebnisse. Ich weiß nicht, welche Art
x.ReceiptNo
steht zwar, aber ruftInt.Parse
ist nicht erlaubt in Linq-To-Entities. Sie können filter zuerst und dann rufenAsEnumerable
tun zu können, die Analyse und die Bestellung in Erinnerung.Value cannot be null
.Wenn ich geändert.OrderByDescending(x => Int32.Parse(x.ReceiptNo))
zu.OrderByDescending(x => x.ReceiptNo)
die Abfrage funktioniert.Aber er hat immer noch Zweifel, wiedescending
funktioniert aufstring
WerteSie können versuchen
OrderByDescending(x => x.ReceiptNo != null ? Int32.Parse(x.ReceiptNo) : 0)
mit '0' als default-Wert wenn nullDanke Kumpel, es funktioniert.Vergessen, dass es könnte eine Möglichkeit sein, null .:)
InformationsquelleAutor Alexander Derck
verwenden und
.AsQueryable()
InformationsquelleAutor Piotr