[ S A J A @ 11.02.2015. 21:41 ] @
Imam filter koji radi na sledeći način:

Code:
Dim PretragaString As String = RadTextBoxPretraga.Text

Dim query = From nal In RadFormMain.db.Nalozi
            Where
               nal.ImeKlijenta.Contains(PretragaString)
            Select
               ...


Međutim, ne baš inteligentni korisnici upisuju imena nekad sa našim slovima a nekad bez pa to otežava pretragu, tačnije mora dva puta da se traži. Sad sam probao (i uspeo) da napravim da pretraga radi na oba načina, samo me zanima jel ima neka bolja varijanta, malo mi ovo deluje glupo:

Code:
Dim PretragaString As New List(Of String)
PretragaString.Add(RadTextBoxPretraga.Text)
If RadTextBoxPretraga.Text.IndexOf("ć") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("ć", "c"))
If RadTextBoxPretraga.Text.IndexOf("c") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("c", "ć"))
If RadTextBoxPretraga.Text.IndexOf("š") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("š", "s"))
If RadTextBoxPretraga.Text.IndexOf("s") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("s", "š"))
If RadTextBoxPretraga.Text.IndexOf("č") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("č", "c"))
If RadTextBoxPretraga.Text.IndexOf("c") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("c", "č"))
If RadTextBoxPretraga.Text.IndexOf("ž") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("ž", "z"))
If RadTextBoxPretraga.Text.IndexOf("z") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("z", "ž"))
If RadTextBoxPretraga.Text.IndexOf("đ") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("đ", "dj"))
If RadTextBoxPretraga.Text.IndexOf("dj") <> -1 Then PretragaString.Add(RadTextBoxPretraga.Text.Replace("dj", "đ"))

Dim query = From nal In RadFormMain.db.Nalozi
            Where
               PretragaString.Any(Function(x) nal.ImeKlijenta.Contains(x)) 
            Select
               ...
[ mmix @ 11.02.2015. 22:35 ] @
Mozes da iskoristis collate na bazi za te poslove. Pogledaj vise detalja kako da uklonis diakritike i kako da nateras SQL da ih ignorise u pretrazi. Medjutim, sam LINQ to ne podrzava, moraces da radis intervencije na bazi.

http://stackoverflow.com/quest...ation-and-case/8144930#8144930

A ako pozivas direktno SP ili SQL, mozes i da iskoristi privremenu kolaciju u stripovani format:

Code (sql):
SELECT * FROM T1
WHERE Ime COLLATE SQL_Latin1_General_CP1_CI_AI LIKE '%ic%'


rezultat:
Mića
MašniČistač
[ S A J A @ 15.02.2015. 21:33 ] @
Sve radim preko EF-a pa i rešenje mora da bude u okviru njega. Posle duže zezancije, uspeo sam da nađem rešenje.


Prvo sredim string koji upiše korisnik:

Code:
    <System.Runtime.CompilerServices.Extension> _
    Public Function SrediZaPretragu(s As [String]) As String

        s = s.ToLower.Replace("ć", "c")
        s = s.ToLower.Replace("č", "c")
        s = s.ToLower.Replace("đ", "dj")
        s = s.ToLower.Replace("ž", "z")
        s = s.ToLower.Replace("š", "s")

        Return s.ToLower
    End Function



Code:
Dim PretragaString As String = RadTextBoxPretraga.Text.SrediZaPretragu



Linq...

Code:
Dim query = From nal In RadFormMain.db.Nalozi
            Where
               nal.ImeKlijenta.ToLower.Replace("ć", "c").Replace("č", "c").Replace("đ", "dj").Replace("ž", "z").Replace("š", "s").Replace("Ć", "c").Replace("Č", "c").Replace("Đ", "dj").Replace("Ž", "z").Replace("Š", "s").Contains(PretragaString)
            Select
               ...



Sve bi bilo jednostavnije kad bi kreatori EF-a dozvolili upotrebe funkcija u linq upitima (što traži jedno par miliona ljudi) pa bi to izgledalo ovako:

Code:
Dim query = From nal In RadFormMain.db.Nalozi
            Where
               nal.ImeKlijenta.SrediZaPretragu.Contains(PretragaString)
            Select
               ...


[Ovu poruku je menjao S A J A dana 15.02.2015. u 22:48 GMT+1]
[ Shadowed @ 15.02.2015. 22:48 ] @
Citat:
S A J A:
Sve bi bilo jednostavnije kad bi kreatori EF-a dozvolili upotrebe funkcija u linq upitima (što traži jedno par miliona ljudi) pa bi to izgledalo ovako:

Code:
Dim query = From nal In RadFormMain.db.Nalozi
            Where
               nal.ImeKlijenta.SrediZaPretragu.Contains(PretragaString)
            Select
               ...

Imas li neki predlog kako da to urade?
[ S A J A @ 15.02.2015. 23:09 ] @
Citat:
Shadowed: Imas li neki predlog kako da to urade? :)


Naravno da nemam, neka se snađu. Ako može da se napravi nuklearna bomba onda može i jedna funkcija da radi u linq upitu. Uostalom, ako im radi Replace i još neke funkcije, onda definitivno da može. Nego sve to lenjo, daju rezultate na kašičicu, treba da čekaš verziju EF14 da bi nešto uradili. Baš njih briga što sam ja izgubio par sati da dođem do onoga gore što sam napisao. A pogotovo što mi onakav ružan kod bode oči.
[ Shadowed @ 16.02.2015. 00:24 ] @
Stvar je u tome da neke standardne funkcije iz .net framework-a imaju svoje ekvivalente u SQL-u pa su za njih uradili generisanje odgovarajuceg SQL-a. Tu spada i Replace. Medjutim, za tvoju custom funkciju ne mogu da generisu SQL u EF-u. Ako ne previdjam nesto, jedini nacin bi bio da se dovuku svi podaci pa onda uradi na aplikativnom nivou filtriranje. A to mozes i sada.