• 7 odgovora
  • 3.942 pregleda
Filtriranje liste u VB NET-u 24.11.2014. u 11:03 · pre 145 meseci #1
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 ...
Potpis
Programming is fun, but writing good software is hard ...
Re: Filtriranje liste u VB NET-u 24.11.2014. u 15:01 · pre 145 meseci #2
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.
Re: Filtriranje liste u VB NET-u 28.11.2014. u 08:00 · pre 144 meseci #3
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 ?
Potpis
Programming is fun, but writing good software is hard ...
Re: Filtriranje liste u VB NET-u 28.11.2014. u 08:21 · pre 144 meseci #4
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.
Re: Filtriranje liste u VB NET-u 28.11.2014. u 12:04 · pre 144 meseci #5
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
Potpis
Programming is fun, but writing good software is hard ...
Re: Filtriranje liste u VB NET-u 02.12.2014. u 10:58 · pre 144 meseci #6
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;

Potpis
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
Re: Filtriranje liste u VB NET-u 02.12.2014. u 21:48 · pre 144 meseci #7
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
Potpis
Programming is fun, but writing good software is hard ...
Re: Filtriranje liste u VB NET-u 02.12.2014. u 21:50 · pre 144 meseci #8
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

...
Potpis
Programming is fun, but writing good software is hard ...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme