189 messaggi dal 26 marzo 2001
Ciao,

esiste un modo per simulare l'operatore LIKE nelle query LINQ To Entities in Entity Framework 4.0?

Ho visto che esistono i metodi StartsWith, EndsWith e Contains ma se volessi implemetare quello che farei con l'operatore LIKE in una query T-SQL, dovrei scrivere tre query LINQ To Entities, una per ognuno dei tre metodi, e in ogni caso non riuscirei a gestire il carattere '?'.
Ciao !
Puoi utilizzare la classe SqlMethods e il suo metodo Like, in questo modo:

var query = from c in ctx.Customers

            where SqlMethods.Like(c.City, "%testo%")

            select c;

Marchi Giuseppe
http://www.peppedotnet.it
189 messaggi dal 26 marzo 2001
Ciao,

penso che SqlMethods.Like sia utilizzabile solo in LINQ To SQL. Io vorrei fare la stessa cosa ma in LINQ To Entities, è possibile?
già hai ragione.. ho appena provato anche io.
ti rimane solo l'opzione del metodo Contains allora..

http://th2tran.blogspot.com/2009/06/linq-to-entities-does-not-recognize.html

Marchi Giuseppe
http://www.peppedotnet.it
189 messaggi dal 26 marzo 2001
Ciao,

alla fine l'unico modo che ho trovato è quello di utilizzare StartsWith, EndsWith o Contains a seconda del criterio di ricerca.

Naturalmente ho dovuto fare tutto manualmente, quindi nel mio caso, in cui uso query LINQ To Entities precompilate, ho dovuto triplicare la query in ciascuna query usare uno dei tre medodi StartsWith, EndsWith e Contains.
Inoltre per capire quale delle tre query utilizzare, ho dovuto fare un parsing della stringa da ricercare.

Mi sembra molto laboriosa come soluzione e considerando l'utilizzo di query precompilate, ogni volta che ho la necessità di fare un query con l'operatore LIKE, devo triplicare le query.

Sarebbe stato molto comodo avere SqlMethods.Like anche in Linq To Entities. Il fatto che non ci sia mi sembra molto strano.

Avevo pensato anche alla possibilità di creare una Edm Function personalizzata, ma non so se può essere una soluzione percorribile.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.