fckertube.com

  

Beste Artikel:

  
Main / Entity Framework c # where-Klauseloperator

Entitätsframework c # where-Klauseloperator

Codebeispiele: In diesem Teil wird erläutert, wie SQL-Datenbanken mit den definierten Zuordnungsklassen abgefragt werden. Eine Abfrage mit einer solchen Methode führt zu einer NotSupportedException. In der obigen Liste:. Hier werden Abfrageausdrücke nur für Join-Abfragen demonstriert, bei denen sie möglicherweise intuitiver sind als Abfragemethoden.

In der Realität sollte für jede Arbeitseinheit immer ein DbContext-Objekt erstellt und angeordnet werden. Wie bereits erwähnt, ist DefaultIfEmpty die einzige bereitgestellte Generierungsmethode: Die andere DefaultIfEmpty-Überladung akzeptiert einen angegebenen Standardwert: In diesem Fall wird der angegebene Standardwert —1 verwendet:.

Diese Überladung und ihre Übersetzung funktionieren für eine einzelne Spalte. Es wird eine NotSupportedException für den Entitätstyp: ausgelöst. DefaultIfEmpty kann auch zum Implementieren von Outer Join verwendet werden, was in Kürze erläutert wird.

Entity Framework übersetzt Queryable. Und wieder der Prädikatausdrucksbaum, keine Prädikatfunktion in Enumerable. OfType funktioniert für den Entitätstyp. Es wird eine NotSupportedException für den primitiven Typ ausgelöst, der eine einzelne Spalte darstellt:

In den obigen Abfragen Abfragbar. Beispielsweise:. Diese beiden Abfragen sind semantisch äquivalent. Dies liegt daran, dass GroupBy oben eine hierarchische Ergebnissammlung von Gruppen zurückgibt und jede Gruppe eine Sammlung von Werten ist. Eine SQL-Abfrage kann jedoch nur eine Zeilentabelle ergeben.

So funktioniert es: Dies kann mit einer GroupBy-Überladung erfolgen, die einen resultSelector akzeptiert, oder gleichwertig mit einer zusätzlichen Select-Abfrage:. Beachten Sie, dass die aggregierte Abfragemethode Count aufgerufen wird, um das Ergebnis zu reduzieren.

Hier geben GroupJoin und Select ein hierarchisches Ergebnis, eine Sammlung von Sammlungen, zurück, sodass SelectMany aufgerufen wird, um es auf eine Sammlung von Werten zu reduzieren. Ihre Abfrageausdrucksversionen sind: Hier sind die Entitäten ProductCategory und ProductSubCategory zugeordnet. Auch der innere Join kann über die Navigationseigenschaft implementiert werden: Anscheinend ist die Navigationseigenschaft der einfachste Weg für Join-Abfragen, solange die Entitäten zugeordnet sind. Wenn die obige Abfrage von Join mit Schlüsseln oder von SelectMany mit Schlüsseln implementiert wird, sind mehrere Join- oder SelectMany-Aufrufe erforderlich.

Die linke äußere Verknüpfung kann mit GroupJoin und Select erfolgen. Über GroupJoin und Select wird ein hierarchisches Ergebnis zurückgegeben, sodass beide in dasselbe Muster wie im ersten GroupBy-Beispiel oben übersetzt werden: Um eine einfache Abfrage für Linksaußenverknüpfungen zu implementieren, rufen Sie einfach SelectMany auf, um das hierarchische Ergebnis zu reduzieren: Und ihre Versionen für Abfrageausdrücke sind: In den folgenden Beispielen wird der Listenpreis für teure Produkte von mehr als 2000 und der Listenpreis für billige Produkte von weniger als 100 abgefragt und anschließend gekreuzt, um alle möglichen Produktpakete zu erhalten, wobei jedes Paket ein teures Produkt und ein billiges Produkt enthält:

Entitäten können sich mit sich selbst verbinden. Hier ist die linke Tabelle eine Tabelle mit Zahlen, die rechte Tabelle ist eine Tabelle mit Unicode-Zeichenfolgen. Jede Zahl wird mit dieser Anzahl von Zeichenfolgen abgeglichen, daher lautet das Ergebnis: Hier wird Take aufgerufen, wenn das hierarchische Ergebnis abgeflacht wird. Wenn eine Gruppe nicht leer ist, enthält diese Abfrage im Abfrageergebnis logischerweise 1 Zeile. Wenn eine Gruppe leer ist, enthält das Abfrageergebnis keine Zeile für diese Gruppe. Wie bereits erwähnt, können GroupJoin und die Eins-zu-Viele-Zuordnung hierarchische Daten erzeugen, die dann von SelectMany: abgeflacht werden können.

Der Unterschied zu Take besteht darin, dass unabhängig davon, ob die Gruppe leer ist oder nicht, im Abfrageergebnis immer 1 Zeile für diese Gruppe vorhanden ist. GroupBy kann auch für komplexere Szenarien verwendet werden, z. B. um die vollständigen Entitäten mit bestimmten unterschiedlichen Eigenschaften abzufragen. Im folgenden Beispiel wird versucht, das Produkt in UniversalProduct zu konvertieren:

Die andere Konvertierungsabfragemethode ist AsQueryable. Denken Sie auch an Enumerable. AsEnumerable kann mehr abgeleitete Quellen konvertieren. E. Hier ist die Implementierung von Enumerable. AsEnumerable und Queryable. AsQueryable die generische Überladung:. Visit wird aufgerufen, um die Abfrage in eine lokale LINQ to Objects-Abfrage zu übersetzen und die Abfrage dann lokal auszuführen. Das Ausführen der obigen Abfrage löst eine NotSupportedException aus. Dies ist beabsichtigt, da diese Art der Zuordnung dem Entity Framework Schwierigkeiten bereitet.

Beispielsweise behält DbContext standardmäßig die Zuordnung zwischen entfernten Zeilen und Abfrageergebnisentitäten bei, und das Erstellen von Entitäten im laufenden Betrieb verhindert dies. Im folgenden Beispiel wird das erste oder Standardprodukt mit ListPrice größer als 5000 abgefragt: Die folgenden Beispiele fragen das System ab. Int32 Anzahl der Kategorien und das System. Int64-Anzahl der Produkte mit ListPrice größer als 0:.

In den folgenden Beispielen werden das neueste ModifiedDate von Fotos und der niedrigste ListPrice von Produkten abgefragt: Im folgenden Beispiel wird einfach abgefragt, ob ein Produkt vorhanden ist:

Alle können auch von Any gleichwertig implementiert werden. Ihre Übersetzung ist nicht identisch, aber im gleichen Muster. Navigation umschalten Dixins Blog.

Dixins Blog-Code-Beispiele: DefaultIfEmpty Filterungsbeschränkung: Where, OfType-Zuordnungsprojektion: Gruppierung auswählen: GroupBy Join: Concat Set: Zip Partitionierung: Cast, AsQueryable Gibt einen einzelnen Wert zurück: Alle, Beliebig, Enthält Gleichheit: In der obigen Liste: SQL-Datenbank hat keine eingebauter Zip-Betrieb usw ..

Bei den unterstrichenen Methoden werden einige Überladungen nicht unterstützt: Um den Code zu verkürzen, wird ein Datenbankobjekt für alle Abfragen wiederverwendet: Generierung Wie bereits erwähnt, ist DefaultIfEmpty die einzige bereitgestellte Generierungsmethode: WriteLine-Kategorie?.

In diesem Fall wird der angegebene Standardwert —1 verwendet: Es wird eine NotSupportedException für den Entitätstyp ausgelöst: Es kann kein konstanter Wert vom Typ 'Dixin' erstellt werden. In diesem Zusammenhang werden nur primitive Typen oder Aufzählungstypen unterstützt.

Filtereinschränkung Entity Framework übersetzt Queryable. WriteLine-Kategorie. String 'unterstützt keine Übersetzung nach SQL. Es wird eine NotSupportedException für den primitiven Typ ausgelöst, der eine einzelne Spalte darstellt: Int32 'ist kein gültiger Metadatentyp für Typfilteroperationen.

Die Typfilterung gilt nur für Entitätstypen und komplexe Typen. Zum Beispiel: Concat-Kategorie. Name, Kategorie. WriteLine-Produkt. So funktioniert es: Das Join-Ergebnis ist eine Tabelle aller Gruppenschlüssel- und Gruppenwertpaare ProductCategoryID- und Name-Paare. Anschließend werden alle Gruppenschlüssel- und Gruppenwertpaare nach den Gruppenschlüsseln sortiert, um sicherzustellen, dass im Endergebnis die Werte werden Gruppe für Gruppe angezeigt.

Dies kann mit einer GroupBy-Überladung erfolgen, die einen resultSelector akzeptiert, oder entsprechend einer zusätzlichen Select-Abfrage: WriteLine-Unterkategorie. ProductCategoryID entspricht Kategorie.

Ihre Abfrageausdrucksversionen sind: Join ",", Kategorie. ProductCategoryID entspricht der Unterkategorie. Und ihre Abfrageausdrucksversionen sind:

(с) 2019 fckertube.com