Frage

Ich halte eine Ausnahme über Linq bekommen to Entities nicht certaion Abfrage Ausdrücke wie diese unterstützt:

MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString))

Ich versuche, nicht entlang der String-Parsing auf das Unternehmen zu speichern passieren, möchte ich zum Vergleich die Zeichenfolge in eine ganze Zahl nur analysieren. Ist die einzige Arbeit, um dies zu tun, bevor die Hand, oder bin ich total weg hier?

War es hilfreich?

Lösung

Die beste Möglichkeit (zumindest für das Beispiel, das Sie gegeben haben) ist es, den Betrieb aus Ihrer LINQ-Anweisung zu ziehen:

Int32 brandId = Int32.Parse(brandIdString)
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == brandId )

Erklärung:

Wenn Sie LINQ verwenden, will es Möglichkeiten, um herauszufinden, wie viel von der Arbeit zu entlasten, wie es Ihre Datenbankabfrage kann. Um das zu tun, schafft es tatsächlich einen Ausdruck Baum aller Dinge, die Sie sagen, es in Ihrer verschiedenen Lambda-Ausdrücke zu tun. Dann, wenn Sie die Abfrage ausgeführt werden soll, entscheidet sie, welche SQL-Anweisung am besten sein wird, zu tun, was Sie es gefragt haben zu tun. Dies ermöglicht es einige sehr extravagant Optimierung zu tun. Wenn es jedoch nicht weiß, wie etwas in eine SQL-Anweisung zu konvertieren, wird es sauer auf Sie, wenn Sie versuchen, die Abfrage auszuführen.

Andere Tipps

Können Sie diese verwenden?

MyDataContext db = new MyDataContext();
Brand b = db.Brands.Where(b => b.BrandId == Int32.Parse(brandIdString)).First();

Eine alternative Lösung (nicht mit Lambdas ...) ist dies:

MyDataContext db = new MyDataContext();

Brand b = (from Brand b in db.Brands
           where b.BrandId == Int32.Parse(brandIdString)
           select b).First();

(Auch sind Sie nicht die ; am Ende jeder Codezeile, und Sie haben nicht einen Variablennamen angegeben für alles, was Sie aus der Abfrage bekommen, aber ich nehme an diejenigen Tippfehler sind nur hier .. ).

Die Datenbank existiert nicht String-Parsing Bedürfnisse zu dienen. Führen Sie die erforderliche Analyse, bevor es beteiligt sind.

Ja. Dieses saugt. Ich finde, dass Sie das Parsen oder Normalisieren von Daten außerhalb der Abfrage zu tun haben ... dann in den Ergebnissen passieren. Ich lief dies in bei dem Versuch, einig Datum in den Grenzen der Abfrage Formatierung zu tun. Ich landete es aus der Abfrage in ein String-Variable zu bewegen und dann in den Variablen mit der richtigen Formatierung bereits angewandt geben.

LAME - Entity Framework hat einen langen Weg zu gehen

!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top