Linq provjera

poruka: 10
|
čitano: 1.919
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Linq provjera

Bok,

 

Počinjem malo učiti Linq to Entity jer bih htio izmijenit postojeći projekt da se šta manje oslanjam na procedure s obzirom da ih brojim preko 900. Ugl. do sad sve radi jedino je problem kod update-a.

Do sada bih prilikom update-a u proceduri provjeravao postajanje nekog podatka na sljedeći naćin:

 

if ( exists( select * from Valute where Sifra like @Sifra and ValuteID not in(@ValuteID) ) ) begin          raiserror('Valuta ''%s'' sa šifrom ''%s'' već postoji u bazi.', 16, 1, @Naziv, @Sifra )       end

 

Ono što ovaj kôd provjerava je da li postoji već definirana šifra ALI ne smije provjeravati valutu koja se update-a.

 

Trebao bih taj kôd konvertirati u Linq. Sljedeća linija provjerava postojanje šifre ali ne znam na koji naćin odrediti da ne ukljućuje valutu koju trebam update-ati.

 

if ( db.Valute.Any( v => v.Sifra == sSifra ) )

 

Nadam se da sam dobro objasnio, pa eko neko zna naćin nek se javi.

Checked-out since 1983
 
0 0 hvala 0
16 godina
neaktivan
offline
Linq provjera

Pa samo u upit staviš operator & i staviš uvjet da ti v.Sifra ne odgovara toj vrijednosti koja treba update.

if ( db.Valute.Any( v => v.Sifra == sSifra & v.Sifra!=vrijednostKojaTrebaUpdate ) )

Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Linq provjera

Možda sam loše objasnio što želim postići. Recimo da imam sljedeće podatke u tablici:

====================================================
ValuteID    Sifra    Naziv
1          191       HRK
2          978       EUR
3          840       USD
====================================================

 

E sad, ako pokušam spremiti valutu EUR sa istom šifrom '978' bez da išta promijenim, uvijek će javljati da postoji.
Zbog toga moram isključiti iz provjere valutu koja se trenutno sprema, u ovom slučaju ID=2. To činim koristeći "not in" u T-SQL-u ali ne znam kako to isto napravit u Linq sintaksi.

Checked-out since 1983
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Linq provjera

Nekuzin kako bi ti to trebalo da 2 puta unosis isti podatak pa tablice i sluze za to da se ne dupliraju podatci ?!?

 

Ako bas zelis duplirat pa valjda postoji neka logika kad zelis duplirat kad ne napravi 2 LINQ funckije u if-on odaberi jedan. Sobzirom da se linq "izvrsava" tek onda kad stvarno prelazis (vadis) podatke nema nikakve stete po perfomanse

17 godina
neaktivan
offline
Linq provjera

Naravno da ne želin da se dupliciraju podaci, zato i koristim tu provjeru.

 

pri INSERTU se koristi samo provjera šifre

 

if ( exists( select * from Valute where Sifra like @Sifra ) ) begin
     raiserror('Valuta ''%s'' sa šifrom ''%s'' već postoji u bazi.', 16, 1, @Naziv, @Sifra )
end

 

gdje samo provjeram postojanje šifre na svim poljima u tablici.

dok se za update koristi sljedeće,

 

if ( exists( select * from Valute where Sifra like @Sifra and ValuteID not in(@ValuteID) ) ) begin
    raiserror('Valuta ''%s'' sa šifrom ''%s'' već postoji u bazi.', 16, 1, @Naziv, @Sifra )
end

 

Bitan mi je ovaj dio kôda za update koji je podebljan. Da nema tog dijela prilikom svakog spremanja bi javljalo error da šifra već postoji a u biti samo radim update.

Checked-out since 1983
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Linq provjera

neznan sql pa je mali problem dok skuzin sta zelis ako san iz svega ovoga dobro skuzia ti zelis recimo unijet 

 

====================================================
ValuteID    Sifra    Naziv
1          191       HRK
2          978       EUR
3          840       USD

4      978     NESTO
====================================================

 

Jel to to ?

17 godina
neaktivan
offline
Linq provjera

Ne baš. Prilikom inserta bi morao javiti grešku da ta šifra(978) već postoji i taj dio radi bez problema. Ono što je meni bitno je provjera prilikom update-a.

Recimo da korisnik u aplikaciji otvori tu valutu(978) EUR i samo joj promijeni naziv u npr AUD. Tada klikne na botun Spremi.

E sad, kad ne bih provjeravao ValuteID not in(@ValuteID)javila bi se greška da šifra već postoji. To i jest točno ali korisnik želi spremititu valutu pod novim imenomsa istom šifrom. Zato se provjeravasve ostale šifre osim one koja se pokušava spremiti.

Checked-out since 1983
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Linq provjera

Kako mi zivcira ova provjera HTML- teksta kod bug-a ispisen cili tekst sam in on me je*e 3 dana nikako da prihvati, ako je nesto nedozvoljeno zasto neimplementirate da se taj dio odma i makne ako vec znate da je nedozvoljen ?!?

 

evo ti ode ako nekom modu uspije da ubaci tekst neka stavi

 

http://pastebin.com/5Azds19z

17 godina
neaktivan
offline
Linq provjera

Raspisa si se vidin. U međuvremenu sam uspija riješiti problem.

 

if ( db.Valute.Any( v => v.Sifra == sSifra && v.ValuteID != iValuteID ) )
    throw new Exception( "Valuta već postoji u bazi." );

 

To je sve šta je tribalo napravit, a šta je "najlipše" od svega, to je i bila prva stvar koju samo pokušao i nije radilo. Vjerovatno samo nešto krivo upisao pri testiranju pa sam zakljućio da ne radi i nastavio tražiti dalje. Uglavnom sad je sve u redu a to je najbitnije.

Svejedno hvala.

 

pozz

Checked-out since 1983
 
0 0 hvala 0
16 godina
neaktivan
offline
RE: Linq provjera
st.srki kaže...

Raspisa si se vidin. U međuvremenu sam uspija riješiti problem.

 

if ( db.Valute.Any( v => v.Sifra == sSifra && v.ValuteID != iValuteID ) )
    throw new Exception( "Valuta već postoji u bazi." );

 

To je sve šta je tribalo napravit, a šta je "najlipše" od svega, to je i bila prva stvar koju samo pokušao i nije radilo. Vjerovatno samo nešto krivo upisao pri testiranju pa sam zakljućio da ne radi i nastavio tražiti dalje. Uglavnom sad je sve u redu a to je najbitnije.

Svejedno hvala.

 

pozz

 

Ovaj kod koji si ti napisa samo provjerava dali postoje dva ili vise unosa sa kodon npr 978, nisan skuzia da je to ono sta zelis u tom slucaju ti je lakse koristit Count i provjerit jeli jeli broj > 1

 

Osim toga nekome ko cita kod bit ce lakse skuzit sta ta linija znaci

 

npr

 

if (db.Valute.Count(v => v.Sifra == sSifra ) > 1)

Poruka je uređivana zadnji put sub 29.1.2011 17:54 (Orinem).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice