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

Da li je ovo moguce uraditi u linq2sql-u?

[es] :: .NET :: .NET Desktop razvoj :: Da li je ovo moguce uraditi u linq2sql-u?

[ Pregleda: 2871 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MatezYU

Član broj: 4114
Poruke: 1586
*.otpbanka.rs.



+17 Profil

icon Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 07:09 - pre 161 meseci
Pozdrav.

Jedno pitanje u vezi modelovanja tabela u liq2sql (ovo me muci vec danima).
Dakle, pitanje je sledece.
Da li postoji mogucnost da napravim svoj model i zatim kreiram sopstvene asocijacije ka ostalim tabelama,
ali tako da se taj model ne oslanja fizicki kreiranu tabelu ili view na sql serveru.
Nego nekako u pozadini da ja punim taj model sa nekim mojim upitom.
Nije mi jasan taj deo, da li svaki model u linq2sql-u mora fizicki imati u "pozadini" pravu tabelu ili ne mora.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 12:18 - pre 161 meseci
Jel hoces da mesas sql tabele sa POCO objektima ili samo da imas svoj objektni model koji ces da ispitujes sa LINQom?

Ako je ovo prvo, onda tesko, iskreno iako L2S dizajner dozvoljava custom klase u modelu one su predivdjenje za koriscenje u IQueryable klontekstu, nisam nikad ni pokusavao da recimo joinujem SQL tabelu sa nekim IEnumerable<T> ali ne vidim ni kako bi moglo da radi sem da L2S svuce cele tabele na klijenta i onda uradi join u lokalu (a to je uzas). Sto se tice samog l2s dizajnera mislim da bi svaki query sa custom objektom u modelu zavrsio sa "Invalid object name" SQLException jer L2S verovatno ocekuje da taj objekat postoji u storage-u.

Ako medjutim samo imas svoj popunjeni objektni model onda ti L2S ni ne treba, koristis obican LINQ, linq moze da iterira SVE IEnumerable i IEnumerable<T> liste i sve ekstenzije koje postoje za IQueryable (select, distinct, where, etc) postoje i za IEnumerable. AKo bas hoces da imas vizuelno editovanje tog klasnog modela onda ti treba jaci visual studio i koncept zvan "class diagram" u njemu mozes vizuelno da napravis mnogo detaljniji objektni model nego sto to dozvoljava L2S designer.



Code (csharp):

            List<Firma> firme = new List<Firma>
            { new Firma { Naziv = "Petoletka",
                          Radnici = new List<Radnik> { new Radnik {Ime = "pera", Pozicija = "Lozac"},
                                                       new Radnik {Ime = "zika", Pozicija = "Direktor"}
                                                     }},
              new Firma { Naziv = "Prvomajka",
                          Radnici = new List<Radnik> { new Radnik {Ime = "koja", Pozicija = "Lozac"},
                                                       new Radnik {Ime = "seka", Pozicija = "Sekretarica"}
                                                     }}
            };

            var x = from f in firme
                    from r in f.Radnici
                    where r.Pozicija == "Lozac"
                    select r.Ime;
            foreach (var p in x) Console.WriteLine(p);
            Console.ReadLine();




U krajnjoj liniji, ako treba da mesas, nista tebe ne sprecava da podleis query u dva dela, prvi IQueryable L2S koji "razvijes" u IEnumerable i onda fga upotrebis u lokalu zajedno sa lokalnim objektima. Samo oprezno sa kolicinom prevucenih podataka (tj razmisli dal mozda imas neko bolje resenje za taj problem)
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ć
Prikačeni fajlovi
 
Odgovor na temu

MatezYU

Član broj: 4114
Poruke: 1586
*.otpbanka.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 14:15 - pre 161 meseci
Imam dve tabele (fizicki na sql serveru).
U pitanju su master - detail tabele.
Podatke prikazujem u dva grida.
Napunim master tabelu podacima (preko IQueryable).
Posle toga kako se setam kroz master grid, svaka promena selektovanog reda mi automatski okida upit koji puni detail grid.
To radi automatski preko asocijacije.
E sada, meni treba prikaz detail tabele u drugacijem obliku. Da mi se grupisu podaci po odredjenim kolonama.
Ovo sam resio sto sam napravio view od tabele details (grupisao neke iznose po odredjenim kolonama).
Napravio asocijaciju izmedju view-a i master tabele.
Da li sam mogao da napravim ovo nekako drugacije?
Da ne postoji fizicki view na serveru nego nekako kada se korisnik krece po master gridu da se okida taj moj upit koji ce da puni taj model koji bih napravio.
 
Odgovor na temu

MatezYU

Član broj: 4114
Poruke: 1586
*.otpbanka.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 14:23 - pre 161 meseci
Ovde bi ta asocijacija u Master tabeli trebala da bude dovoljno "pametna" da kada se zatrazi podatak od detail tabele (one moje grupisane - nov model) da okida neki upit koji radi select iz baze i grupise i sumira iznose po odredjenim kolonama.
Ne znam da li sam dobro objasnio.
Evo primer.

Master tabela:
1 idMaster
2 Naziv



Detail
1 idMaster
2 Proizvod
3 Magacin
4 Iznos


MojDetail (ovo bi trebalo da bude moj model)
1 idMaster
2 Proizvod
3 Iznos

dakle ovde nemam Magacin, nego sumiram po proizvodu.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 14:36 - pre 161 meseci
Daj parche koda koji ti popunjava details grid kada u master gridu selektujes nesto.
 
Odgovor na temu

MatezYU

Član broj: 4114
Poruke: 1586
*.otpbanka.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 14:42 - pre 161 meseci
Nema koda.
Grid koji prikazuje details mi je nakacen na Master.Details subset.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?21.12.2010. u 15:04 - pre 161 meseci
koristi lazy load u L2Su

sto se tice tvog problema, view ti je koser resenjebez mnogo razmisljanja. druga alternativa je pivotgrid (mislim da devexpress to ima). treca alternativa ti je da petljas nesto sa partial klasama, ali iskreno ti ne bih to preporucio.
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

MatezYU

Član broj: 4114
Poruke: 1586
*.dynamic.isp.telekom.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 08:43 - pre 161 meseci
Citat:
mmix:  view ti je koser resenjebez mnogo razmisljanja.


Nisam te razumeo ovde sta si hteo da kazes.
Dakle, tvoja preporuka je da koristim view-ove tamo gde mogu.
Hteo sam nekako da izbegnem view-ove (da mi se ne gomilaju u bazi samo zbog pojedinih formi).
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 09:13 - pre 161 meseci
pa alternativa ti je da uradis preload mastera i svih njihovih detalja (ono sto smo pokrili u drugoj temi), onda da linqom projektujes taj model u neki svoj agregatni. Mogu ti pomoci ali to je vise posla, u osnovi mislim da ti je to losije resenje. Za pocetak SQL server je bolji u agregaciji brojeva, drugo umesto da prenosis sve detalje prenosis samo rezultat agregata, trece aplikacija ti dobije sve na gotovo u okviru l2s domena (minimalni trud na aplikativnom nivou).

Ako je do SQL menadzmenta i gomilanja view-a, pocni da koristis full Schema name (npr umesto dbo.MojView, napravi semu MojModel i snimi view kao MojMOdel.MojView). Tako mozes po semama da organizujes i zadrzis preglednost. Uostalom agregat detalja po svim magacinima se moze lako pokazati kao veoma koristan iz a druge primene.

I ona druga opcija ti je mozda resenje, pogledaj devexpress dokumentaciju al koliko se secam gridovi podrzavaju razne client-side operacije ukljucjuci grouping i agregaciju (doduse mozda ces morati da koristis pivotgrid za agregaciju iako je po samo jednoj dimenziji)
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

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 09:40 - pre 161 meseci
U stvari, mozda mozes i na pola puta da se nadjes posto je L2S model implementiran kroz parcijalne klase ti mozes komotno da uteras svoj List<MojAgregat> ili (mozda jos bolje) on-demand IEnumerable<MojAgregat> u Mastera. Sa IEnumerable ne moras da radis nikakve agregacije pre vremena vec samo yieldujes agregat iz mojmaster.Details.
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

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 10:30 - pre 161 meseci
Evo ti primer sa injekcijom agregatnog enumeratora u partial klasu mastera

Code (csharp):

    // magija, model
    public class MojDetails
    {
        public int idMaster {get; set; }
        public string Proizvod {get; set; }
        public decimal Iznos {get; set; }
    }


    public partial class Master
    {
        // magija, injekcija enumeratora
        public IEnumerable<MojDetails> MojiDetalji
        {
            get
            {
                // kreiramo grupisanje, pristupanje Details ce izvrsiti lazy load + projekcija u IEnumerable<MojDetails>
                return from det in Details
                       group det by new { det.idMaster, det.Proizvod } into grupa
                       select new MojDetails
                       {
                           idMaster = grupa.Key.idMaster,
                           Proizvod = grupa.Key.Proizvod,
                           Iznos = grupa.Sum(d => d.Iznos)
                       };
            }
        }
    }


Izlaz iz dumpera (dokaz da radi)
idMaster=1 Naziv=Master Plan A Details=... MojiDetalji=...
Details: idDetail=1 idMaster=1 Proizvod=Krpe Magacin=1 Iznos=132.0000 Master={ }
Details: idDetail=2 idMaster=1 Proizvod=Krpe Magacin=2 Iznos=332.0000 Master={ }
Details: idDetail=3 idMaster=1 Proizvod=Lonci Magacin=1 Iznos=444.0000 Master={ }
Details: idDetail=4 idMaster=1 Proizvod=Zakrpe Magacin=2 Iznos=888.0000 Master={ }
MojiDetalji: idMaster=1 Proizvod=Krpe Iznos=464.0000
MojiDetalji: idMaster=1 Proizvod=Lonci Iznos=444.0000
MojiDetalji: idMaster=1 Proizvod=Zakrpe Iznos=888.0000

idMaster=2 Naziv=Master Plan B Details=... MojiDetalji=...
Details: idDetail=5 idMaster=2 Proizvod=Krpe Magacin=4 Iznos=453.0000 Master={ }
Details: idDetail=6 idMaster=2 Proizvod=Krpe Magacin=3 Iznos=555.0000 Master={ }
MojiDetalji: idMaster=2 Proizvod=Krpe Iznos=1008.0000


kao sto vidis moji detalji je agregatna lista (u principu masterId mozes i da izostavis iz agregacije jer su agregati vec na nivou pojedinacnog mastera). Attached ti je ceo projekat pa pogledaj sam

edit: malo optimizacije, ne treba mi yield
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ć
Prikačeni fajlovi
 
Odgovor na temu

MatezYU

Član broj: 4114
Poruke: 1586
*.dynamic.isp.telekom.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 10:30 - pre 161 meseci
Znaci, mogao bih da napravim svoj model (sa agregiranom strukturom) i da ga povezem sa master tabelom (preko asocijacije).
Posle toga sa DataLoadOptions i AssociateWith da napunim taj svoj agregirani model sa podacima.
Onda ne bi bilo lazy load-a, nego kada bi se korisnik kretao kroz Master grid u Details grid-u bi se pojavljivali podaci koje sam vec napunio sa DataLoadOptions-om (agregirani podaci).

Imam jos jednu nedoumicu - ako mozes da mi pojasnis.
Imam jednu tabelu fizicki na serveru.
Napravio sam model u linq2sql-u i napravio parcijalnu klasu tog modela.
Ovde sam kreirao jos neka svoja podatna polja kao sto su Opis i Kolicina. Opis ima samo get metodu i sluzi za prikazivanje sifre i naziva.
Evo kako izleda:

partial class Roba
{
public string Opis
{
get
{
return "(" + this._Sifra + ") " + this._Naziv;
}
}

public decimal Kolicina
{
get; set;
}

}


Imam ovde i kolicinu (koju bih teo da punim sa linq upitom - zavisi od forme gde se prikazuje).
Linq upit mi ne dozvoljava da uradim sledece. Iz nekog razloga bi trebalo da upisem tu neku vrednost za svaku robu - recimo 2.

var a = from t in dc.Robas
select new Roba { Kolicina = 2, Sifra = t.Sifra, Naziv = t.Naziv}

Da li moram da prvo napunim IEnumerable pa onda da protrcim kroz IEnumerable set i onda da za svaku robu podesavam kolicinu ili mogu nekako direknto u Linq upitu da odradim ovo?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 10:40 - pre 161 meseci
Pa, mozes da probas, u stvari mislim da i moze dok god ne dodajes MojDetiails u L2S query ne bi trebalo da ti baca greske. Samo mislim da neces moci da uradis vizuelnu asocijaciju u modelu jer asocijacija u modelu znaci da property MojiDetalji ne bi bio IEnumerable<MojDetalj> vec EntitySet<MojDetalj> a EntitySet se upituje kroz L2S

NIsam bas najbolje razumeo pitanje oko kolicine.
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

MatezYU

Član broj: 4114
Poruke: 1586
*.dynamic.isp.telekom.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 10:46 - pre 161 meseci
Hvala ti za onaj primer.

U vezi kolicine.
Kako mogu kroz linq upit da menjam vrednost jedne kolone ( u select-u)?
Recimo u ovom mom slucaju kolicina je kolona koja ne postoji u bazi.
Kako mogu kroz linq upit da joj dodelim neku vrednost?

Ovde dodajem kolicini vrednost 2 ali to ne radi.
Ovo bi proslo da nisam stavio new Roba nego samo new ali onda bi mi se kreirala anonimna klasa a to mi ne odgovara posto moram da vratim nazad rezultat tipa Roba.

var a = from t in dc.Robas
select new Roba { Kolicina = 2, Sifra = t.Sifra, Naziv = t.Naziv}
 
Odgovor na temu

MatezYU

Član broj: 4114
Poruke: 1586
*.dynamic.isp.telekom.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 11:06 - pre 161 meseci
Hvala jos jednom za primer!
Odlican je - sada mi je jasnije mnogo toga.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 11:10 - pre 161 meseci
Ako je kolicina public property mora da moze bas tako kako si napisao.

Koju gresku ti daje?

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

MatezYU

Član broj: 4114
Poruke: 1586
*.dynamic.isp.telekom.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 11:25 - pre 161 meseci
Mislim da mi ovo javlja:

when casting from nubmer must be less than infinity
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?22.12.2010. u 12:13 - pre 161 meseci
Ah, nisam ni video da su ovo uveli

"Explicit construction of entity type 'xyz' in query is not allowed."

MS ponovo brine o nama kao da smo deca sa posebnim potrebama, blago nama, da slucajno ne uprljamo context kes pa da ih posle davimo.
Al mudriji smo mi iskoristicemo transformacioni delegat da na njegovu konstrukciju dodamo odmah custom vrednosti.

Code (csharp):

Func<Roba, Roba> napravi = t => { t.Kolicina = 2; return t; };

var a = from t in dc.Robas
         select napravi(t);


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

MatezYU

Član broj: 4114
Poruke: 1586
*.otpbanka.rs.



+17 Profil

icon Re: Da li je ovo moguce uraditi u linq2sql-u?23.12.2010. u 07:26 - pre 161 meseci
Hvala ti!
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Da li je ovo moguce uraditi u linq2sql-u?

[ Pregleda: 2871 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

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