Linq2Entities: Abfrage mittels eigener Methode erweitern

29/07/2009 - 09:40 von Andreas | Report spam
Hallo,

ich erstelle gerade eine Suche über die Daten in meiner Datenbank.
Dabei ist mir aufgefallen, dass man mit Linq bei Strings nur die
Contains-Methode mit einem String als Parameter verwenden kann. Ich
wollte nun eine Erweiterungsmethode für string erstellen, die auch
nach einem Array von Werte suchen kann. Die Methode ist ja schnell
gemacht. Nur kann Linq2Entities diese nicht verwenden;
NotSupportedException.

Gibt es denn eine Möglichkeit, wie ich meine Methode mit Linq
verwenden kann?

Die Fehlermeldung:
[NotSupportedException: 'LINQ to Entities' erkennt die Methode
'Boolean Contains(System.String, System.String[])' nicht, und diese
Methode kann nicht in einen Speicherausdruck übersetzt werden.]


Grüße,
Andreas
 

Lesen sie die antworten

#1 Elmar Boye
29/07/2009 - 09:59 | Warnen spam
Hallo Andreas,

Andreas schrieb:
ich erstelle gerade eine Suche über die Daten in meiner Datenbank.
Dabei ist mir aufgefallen, dass man mit Linq bei Strings nur die
Contains-Methode mit einem String als Parameter verwenden kann. Ich
wollte nun eine Erweiterungsmethode für string erstellen, die auch
nach einem Array von Werte suchen kann. Die Methode ist ja schnell
gemacht.



Ich denke Du hast das Konzept von Linq (To Entities) noch
nicht verstanden.
Eine Erweiterungsmethode wird in einen Ausdruck (Linq.Expression)
übersetzt und dieser in eine SQL Anweisung. Ganz hübsch zeigt das:
<URL:http://devblog.petrellyn.com/?p9>

Und so ist das Erstellen einer Linq Methoden nicht gerade
mal schnell gemacht. Und der Satz den Linq To Entities
<URL:http://msdn.microsoft.com/de-de/lib...9.aspx>
(insbesondere der Abschnitt "Mapping von CLR-Methoden zu
kanonischen Funktionen")
versteht ist, das was ein Provider unterstützen kann/muß.

Dein Contains entspràche einer IN(...) Klausel in SQL.
Die müsste wiederum verschiedensten Anforderungen genügen,
wie z. B. unterschiedlichen Datentypen - schliesslich ist
nicht alles eine Zeichenkette auf dieser Welt.

Einen Ansatz findest Du z. B.:
<URL:http://stackoverflow.com/questions/...tities>

(was vermutlich keinerlei Ähnlichkeit mit Deiner
"schnell gemachten" Methode hat).

Gruß Elmar

Ähnliche fragen