Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
LINQ e operatore sql LIKE standard
giovedì 07 febbraio 2013 - 11.35
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 3.5
|
Oracle 10g
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
gio 7 feb 2013 - 11:35
Ciao a tutti,
vorrei ottenere con LINQ (uso FluentNHibernate su db Oracle) l'equivalente delle query sql che usano l'operatore LIKE ...
SELECT * FROM TBL WHERE COLUMN1 LIKE 'da%';
SELECT * FROM TBL WHERE COLUMN1 LIKE 'da%oni';
SELECT * FROM TBL WHERE COLUMN1 LIKE '%lla';
L'operatore Contains, Context.Of<MyClass>().Where(x => x.Column1.Contains("da")), genera in realtà la query
SELECT * FROM TBL WHERE COLUMN1 LIKE '%da%' e questo non è esattamente il risultato delle query.
Qualche idea su come realizzare la cosa?
Davide
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 7 feb 2013 - 12:31
>Ciao a tutti,
ciao
>L'operatore Contains, Context.Of<MyClass>().Where(x =>
>x.Column1.Contains("da")), genera in realtà la query
>SELECT * FROM TBL WHERE COLUMN1 LIKE '%da%' e questo non è esattamente
>il risultato delle query.
>Qualche idea su come realizzare la cosa?
hai provato ad usare invece che contains, StartsWith e EndsWith?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
gio 7 feb 2013 - 14:24
Ciao Alessandro,
si sì ... tartsWith e EndsWith funzionano ... ma perdo un po' di genericità, meglio il contains.
In alcune / pochissime pagine di ricerca uso LINQ / PredicateBuilder (non ho quindi accesso diretto all'sql) e sui filtri di testo libero l'utente può metterci o meno quanti * vuole e in qualsiasi posizione. Quando l'utente mette almeno un * vorrei ''tradurre'' con un like, in caso contrario con l'uguale.
Sto guardando un po' in rete ... se risolvo ti dico. Il contains non è precisissimo, ma fa il suo lavoro e se un utente non è particolarmente attento di questa imperfezione non si accorge. Lo sviluppatore sì :-).
Davide
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
gio 7 feb 2013 - 18:22
perchè non ti crei una funzione customizzata da far girare all'interno del where ?
Andrea Restucci - Web Developer
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
ven 8 feb 2013 - 11:51
1821_PredicateBuilder_01.zip
Ciao a tutti,
ho risolto con un LIKE ad hoc, in allegato, anche se non è perfettissimo, copre moltissimi casi.
var Predicate = PredicateBuilder.True<User>();
Predicate = Predicate.AndAlsoLike(x => x.Name, "da*");
var obj = Context.Of<User>().Where(Predicate);
L'unica pecca è che il StringComparison.InvariantCultureIgnoreCase non da segni di vita, ma credo dipenda da Oracle e me ne ero già accorto tempo fa. Ho risolto creando un campo LowerName mappato con Map(x => x.LowerName).Formula("LOWER(UTENTE)").
Davide
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
ven 8 feb 2013 - 13:00
bello l'utilizzo di questo predicato, non lo conoscevo, io ho sempre fatto a mano:
Func<string, bool> MyPred = (X) =>
{
logica di controllo
return true o false in base alla logica
};
scusa ma qualè il namespace per l'oggetto Expression ?
Andrea Restucci - Web Developer
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
ven 8 feb 2013 - 18:28
System.Linq.Expressions.
Sotto su VS.2008 / .NET 3.5.
Ciao,
Davide
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !