[ nikitaGradov @ 24.11.2014. 11:03 ] @
Imam listu (u VB Net-u) i string za filtriranje ... htio bih da listu filtriram preko WHERE ... kako da to napisem ?

Znaci, treba mi nesto ovako:

- postoji nekaLista
- postoji stringZaFiltriranje = 'polje1 = 222 AND polje2 = 333 AND polje3=456 AND polje4 = 777 ...'

treba mi ovako nesto:

novaLista = nekaLista.Where(Filter=stringZaFiltriranje) ???

Kako da najlakse filtriram listu ?

Hvala unaprijed ...
[ Zidar @ 24.11.2014. 15:01 ] @
To je VB.NET pitanje. Zasto ne uradis ceo upit na SQL serveru, pa onda to ucitas u listu? Nisam siguran da se liet mogu filtrirati na SQL nacin.
[ nikitaGradov @ 28.11.2014. 08:00 ] @
Radi se o transferu aplikacije pisane u nekoj starijoj tehnologiji na .Net platformu.

Ima neka uskladistena procedura koja vraca neki rezultat, koji se dodatno filtrira pomocu 'filtra' koji je string, a koji moze biti nesto ovako:

'Polje1 = nekaVrijednost', a moze biti i nesto ovako:

'Polje1=nekaVrijednost AND Polje2=nekaVrijednost AND Polje3=NekaVrijednost ...'

Ovaj filtar se kreira na osnovu rezultata neke druge uskladistene procedure.

Znaci, pitanje je kako iz liste (koja predstavlja rezultat izvrsenja uskladistene procedure) selektovati one clanove koji odgovaraju filtru (a koji je string) -> nesto kao multikriterijumski linq upit ?
[ Dusan Kondic @ 28.11.2014. 08:21 ] @
Ja sam zbog ovakvih i sličnih problema prestao da koristim List<T> i vratio se na DataTable.
DataTable možeš da filtriraš pomoću DataTable.DefaultView.RowFilter = "Polje1=nekaVrijednost AND Polje2=nekaVrijednost AND Polje3=NekaVrijednost ..."
a podržava i Bind-ovanje ako koristiš WPF ili Silverlight.
[ nikitaGradov @ 28.11.2014. 12:04 ] @
Hvala na odgovoru ...

na tekucemo poslu se forsira koriscenje listi ... do sada, moje kolege, nisu imale slucaj sa visekriterijumskim filtriranje, lista.where(... poljeIzTabele = vrijednostZaFiltriranje)

vidjecu sta mogu, ako ne, na[ravocu metod da uskladistena procedura vraca DataSet ...

Pozdrav
[ dava @ 02.12.2014. 10:58 ] @
Ako si već koristio <list>, završi to ovako:

Napraviš kopiju takve liste:

Code:

            filtrirana = new List<NekaLista>();
            filtrirana = nekaLista;


dalje ispituješ šta je od parametara za filtriranje uneseno na formi:

Code:

            if (polje1.Text.Length > 0)
            {
                filtrirana= filtrirana.FindAll(delegate(NekaLista o)
                {
                    return o.polje1.ToLower().StartsWith(polje1.Text.ToLower());
                });
            }

            if (polje2.Text.Length > 0)
            {
                filtrirana = filtrirana.FindAll(delegate(NekaLista )
                {
                    return o.polje2.ToLower().StartsWith(polje2.Text.ToLower());
                });
            }

        // polje3 ...

        // polje4 ...



ostaje još učitavanje filtrirane liste:

Code:

            DataGrid.DataSource = filtrirana;


U ovom slučaju ti originalna lista ostaje u memoriji i možeš se nekim digmetom "obriši filtere" vratiti na ne filtriranu listu (ako za ovim ima potrebe)


Code:

            DataGrid.DataSource = nekaLista;

[ nikitaGradov @ 02.12.2014. 21:48 ] @
Hvala veliko ...

Inace, danas sam upravo tako i uradio (posto je, kao sto si i ti primjetio, kriterijum za filtriranje na AND osnovi), jedino sam koristio Where (Linq) umjesto FindAll:

Code:

if uslovZaKriterijum_1 then
   listaKojaSeFiltrira = listaKojaSeFiltrira.With(Function(p) p.Polje_X = vrijednost_X).ToList()
end if

if uslovZaKriterijum_2 then
   listaKojaSeFiltrira = listaKojaSeFiltrira.With(Function(p) p.Polje_X = vrijednost_X).ToList()
end if

...


Kao sto sam napisao, ovdje je slucaj da su u kriterijumu samo AND-ovi ... pa sam se 'provukao' na ovaj nacin ...

Hvala svima koji su se javili i pozdrav
[ nikitaGradov @ 02.12.2014. 21:50 ] @
potkrala mi se grska u kucanju, umjesto With, jasno, ie Where:

Code:


if uslovZaKriterijum_1 then
   listaKojaSeFiltrira = listaKojaSeFiltrira.Where(Function(p) p.Polje_X = vrijednost_X).ToList()
end if

if uslovZaKriterijum_2 then
   listaKojaSeFiltrira = listaKojaSeFiltrira.Where(Function(p) p.Polje_X = vrijednost_X).ToList()
end if

...