Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
>> LINQ, LINQ to SQL und Entity Framework 849 Entity Framework Für das Entity Framework scheint es auch in der Version 4.0 leider keine direkte Möglichkeit zu geben, LIKE-Abfragen auszuführen. Und das, obwohl die Klassen SqlFunctions und Entity- Functions eine Menge an SQL-Funktionen enthalten. Eigenartig ... Na ja, die Lösung des Problems ist der direkte Aufruf von Entity SQL (siehe Rezept 307): using (var objectContext = new AdventureWorksLTEntities()) { var products = from product in objectContext.Products.Where("it.Name LIKE 'm%500%'") it.Name orderby product.Name select product; foreach (var product in products) { Console.WriteLine(product.Name); } } Listing 581: Entity Framework Abfrage mit LIKE Das it in der Abfrage ist, wie ich in Rezept 307 erläutere, der von LINQ to Entities verwendete Aliasname für die abgefragte Entitätsmenge. 307 SQL direkt ausführen Wenn Sie in speziellen Fällen in LINQ to SQL eine SQL-Abfrage direkt ausführen wollen, kön- nen Sie dies über die ExecuteQuery -Methode der DataContext -Klasse. Diese Methode erwartet am Typparameter die Klasse, deren Instanzen im Ergebnis zurückgegeben werden sollen. Dabei kann es sich um eine beliebige Klasse handeln, die lediglich einen parameterlosen Stan- dardkonstruktor zur Verfügung stellen muss. Wesentlich ist, dass die Klasse für die in der SQL- Anweisung abgefragten Felder ein gleichnamiges öffentliches, nicht schreibgeschütztes Feld oder eine entsprechende Eigenschaft besitzt. ExecuteQuery sucht für alle abgefragten Felder per Reflektion ein öffentliches Feld oder eine öffentliche Eigenschaft, das bzw. die denselben Namen besitzt. Wird ein Feld oder eine Eigenschaft gefunden, schreibt ExecuteQuery den Inhalt des Datenbankfelds dort hinein. Am Argument query übergeben Sie die Abfrage. In der Abfrage können Sie Platzhalter ( {0} , {1} etc.) einbauen, deren Werte Sie an den folgenden optionalen Object - Parametern überge- ben. So können Sie zum Beispiel in der AdventureWorksLT-Datenbank (siehe Einleitung zu diesem Kapitel) Summendaten für die einzelnen Kategorien in Instanzen einer CategorySummary -Klasse für Artikel abfragen, deren Kategorie-ID größer/gleich 5 ist. Dabei müssen Sie beachten, dass die Tabellen der AdventureWorksLT-Datenbank zum einen (dummerweise) in der Einzahl benannt sind und zum anderen zum Schema SalesLT gehören (deswegen »FROM SalesLT.Pro- duct«): LINQ LINQ to SQL