Nun, das klingt einfacher als es ist! Ich habe eine Tabelle, die als Zeichenfolge Werte gespeichert enthält. Aber mein Code benötigt sie als Dezimalwerte und sie müssen als Teil der Abfrage, die IQueryable macht, in Dezimalzahlen umgewandelt werden! Daher ist die Verwendung von .ToList() nicht möglich. Die Besetzung muss von der Datenbank dahinter erledigt werden.
Dieses IQueryable ist im Grunde Teil einer Kette auf IQueryables, so dass eine nächste Abfrage einen Filter auf diesen Betrag hinzufügen könnte, um eine kleinere Auswahl zu treffen oder andere Arten von Mathe mit dem Betrag zu machen. Die Abfrage, die eingeht, ist möglicherweise bereits eine Unterauswahl aller Daten.
Edit: Lassen Sie mich erklären, was ich hier arbeite: Ich habe etwas wie dieses Verfahren haben zu schreiben:Wie konvertiert man eine Zeichenfolge in eine Dezimalzahl in einem IQueryable
public static IQueryable<PriceList> GetPriceList(this IQueryable<PriceData> query) => query.Select(d => new PriceList{Name = d.Item.Name, Price = decimal.Parse(d.Value)}).AsQueryable();
Und PriceData ist ein Datensatz ein paar Felder und die Preise als String-Werte enthalten. Aber der PriceList-Datensatz benötigt sie als Dezimal.
Diese Methode könnte dann von einer anderen Erweiterungsmethode für weitere Auswahlen, Mathematik und was auch immer verwendet werden. Es ist nur, dass decimal.parse und andere Optionen nicht innerhalb eines IQueryable funktionieren ...
Wie wäre es 'dbContext.someTable.SqlQuery ("SELECT CONVERT (Betrag, DECIMAL) FROM sometable") AsIQueryable()'? –
Wenn ich das nur könnte, ja. Aber nein. Ich bekomme ein IQueryable als Eingabe und muss ein IQueryable als Ausgabe ausgeben, da es alles Teil eines größeren Ausdrucksbaums ist ... –
Warum ist der Preis in erster Instanz eine Zeichenkette? Das scheint falsch zu sein. (Und sollte wahrscheinlich Geld, Dezimal sein). Das heißt, * wahrscheinlich * ein Duplikat von https://stackoverflow.com/questions/12118258/int-parse-in-linq-expression –