Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VB.NET where LINQ i jos par "sitnica" ako možete pomoći

[es] :: .NET :: VB.NET where LINQ i jos par "sitnica" ako možete pomoći

[ Pregleda: 2823 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Sija

Član broj: 19607
Poruke: 83
*.tel.net.ba.



+8 Profil

icon VB.NET where LINQ i jos par "sitnica" ako možete pomoći05.03.2015. u 08:31 - pre 111 meseci
Imam npr. ovaj kod kod koga mi se mijeja samo Where uslov i glupo mi je da ga 30 puta prepisujem:

Code:
    Dim db As bazatEntities = New bazatEntities
  Dim db = From s In ConAnalKArtica.FinNalogStavke _
             Where s.Broj = lngBroj 
             Select s.BrojDokumenta, s.Opis, s.Datum, s.Valuta

                dgwLista.DataSource = db.ToList


1.)Pitanje je da li i kako može da se uslov tj. Where mijenja tj. da se pošalje kroz Sub u ovom oblku "s.Broj =" ili "s.BrojDokumenta" tj. da ne pisem sql upite jer ne vidim svrhu koristienja linq-a ako cu pisati sql upite?
2.) Da li se u Where uslov moze staviti If ili Case?

3.) Ne vezano za gornja pitanja da li mi neko moze iz iskustva reci ili postoji neko istrazivanje: Kako je korisnicima lakse unositi podatke vertikalno ili horizontalno tj. da se aplikacija dizajnira tako da npr. textbox-ovi idu horizontalno ili vertikalno kod unosa podataka?

Hvala na bilo kakvom odgovoru.

 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1907
*.static.sbb.rs.



+421 Profil

icon Re: VB.NET where LINQ i jos par "sitnica" ako možete pomoći06.03.2015. u 18:21 - pre 111 meseci
Instaliraj System.Linq.Dynamic.Library pa ćeš moći da praviš "dinamičke" uslove, evo primera:

Code:
Dim query = From p In Northwind.Products _
        Where p.CategoryID = 2 And p.UnitPrice > 3 _
        Order By p.SupplierID _
Select p.ProductName, p.UnitPrice


Code:
Dim query = Northwind.Products _
        .Where("CategoryID=2 And UnitPrice>3") _
        .OrderBy("SupplierId") _
        .Select("New(ProductName, UnitPrice)")



If možeš da koristiš i u where i u select delu, imaš primere na netu a select case mislim da nema, moraćeš da se zadovoljiš sa ifovima.
Ovo je neki moj primer povlačenja podataka iz baze. Prvo se u masci postave razni filteri pa se onda povuku podaci.


Code:
     Dim query = From nal In RadFormMain.db.Nalozi
             Where
                nal.Knjiga = knjiga And
                (nal.DatumPrijema >= DatPrijOd And nal.DatumPrijema <= DatPrijDo) And
                If(DatIzdDoIsNull, nal.DatumIzdavanja >= DatIzdOd Or String.IsNullOrEmpty(nal.DatumIzdavanja), nal.DatumIzdavanja >= DatIzdOd And nal.DatumIzdavanja <= DatIzdDo) And
                If(DoktorFilter, nal.DoktorID = DoktorID, nal.DoktorID <> DoktorID) And
                If(StatusFilter, nal.StatusID = StatusID, nal.StatusID <> StatusID) And
                If(NplFilter, nal.NacinPlacanjaID = NplID, nal.NacinPlacanjaID <> NplID)
             Select
                id = nal.ID,
                Broj = nal.BrojNaloga,
                nal.ImeKlijenta,
                Adresa = nal.AdresaKlijenta,
                Kontakt = nal.KontaktKlijenta,
                nal.DatumPrijema,
                nal.DatumIzdavanja,
                Doktor = nal.Doktori.Ime,
                Status = nal.Statusi.Naziv,
                NPL = nal.NaciniPlacanja.Naziv,
                nal.Iznos
            Order By Broj



 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: VB.NET where LINQ i jos par "sitnica" ako možete pomoći06.03.2015. u 20:58 - pre 111 meseci
Ovo sa dynamic stringovima u klauzulama definitivno ubija svaku poentu LINQa i vraca nas na staro vreme SqlReadera i string dependency-a, kad su programi pucali u runtime-u zbog jednog slova.

Svaki element EF.NET (ili Linq2SQL) LINQ-a je neki od ExpressionTree elemenata koji moze da se "ubrizga" u odgovarajucu LINQ konstrukciju i to je pristup koji treba koristiti. Npr (za C#) smo skoro resavali slican problem:
http://www.elitesecurity.org/p3523790

Nisam toliko verziran u VB.NETu ali sigurno postoji slicno resenje koje ce i dalje ostati strong typed naspram modela.


Btw, ta gomila If-ova u WHERE ne izgleda nimalo zdravo Linq od toga napravi jedan ogroman ExpressionTree od kojeg napravi jos grozomorniji SQL upit sa brdom CASE/WHEN/END provera IMHO, bar zakljucno sa EF.NET 5, parser ne radi client-side boolean optimizaciju, sto ce reci svi tvoji filteri idu na SQL server i evaluiraju se na SQL serveru za sve redove. Probaj da primenis metod sa linka koji sam ti dao, dakle za svaki od filtera napravi Expression<Func<TOBJ, bool>> i naredjajih redom u Where lancu (sekvencijalni Where uslovi su isto sto i pojedinacni uslovi povezani AND operator). Tako ces na server slati samo uslove koji ti zaista trebaju.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1907
*.static.sbb.rs.



+421 Profil

icon Re: VB.NET where LINQ i jos par "sitnica" ako možete pomoći07.03.2015. u 20:46 - pre 111 meseci
Citat:
mmix
Btw, ta gomila If-ova u WHERE ne izgleda nimalo zdravo :D


Znam, to sam koristio u jednoj maloj aplikaciji, za veće stvari koristim ili Stored Procedure (ako je SQL Server) ili DataAdapter sa "golim" SQL upitom (ako je SQLite).

 
Odgovor na temu

Sija

Član broj: 19607
Poruke: 83
178.236.81.*



+8 Profil

icon Re: VB.NET where LINQ i jos par "sitnica" ako možete pomoći08.03.2015. u 19:26 - pre 111 meseci
Hvala obojici, za sada cu cini mi se da lupam glavom o sto sa ovim primjerom u C#, a dok ne shvatim ima da se razbacivam mixom malo stored, malo prosljedjivanih u stringu, a malo cisti linq. :D
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: VB.NET where LINQ i jos par "sitnica" ako možete pomoći08.03.2015. u 21:26 - pre 111 meseci
Citat:
S A J A:
Citat:
mmix
Btw, ta gomila If-ova u WHERE ne izgleda nimalo zdravo


Znam, to sam koristio u jednoj maloj aplikaciji, za veće stvari koristim ili Stored Procedure (ako je SQL Server) ili DataAdapter sa "golim" SQL upitom (ako je SQLite).



Pogledaj ovaj link i primere, na tvom primeru definitivno moze da se iskoristi i tako izbegnu stored procedure. Prva stvar koje covek mora da se oslobodi je da o LINQu razmislja kao o C# (ili vb.net) SQL-u jer on to nije. Drugo, da sve mora da stane u kanonsku formu from..where..select . LINQ je mnogo vise od toga, ta forma je samo ispomoc za rudimentarne oblike upotrebe.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: VB.NET where LINQ i jos par "sitnica" ako možete pomoći

[ Pregleda: 2823 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.