Osnovne LINQ operacije (LINQ serija - Dio 3)

Startujte VWD i pocecemo sa primjerima LINQ operacija.

Otvorite default.aspx fajl i predjite na kode (F7). Pocecemo sa tipkanjem u Page_Load event handler-u, u ovom slucaju necu demonstrirati data binding jer je ovaj post o LINQ-u i pretpostavljem da citalac vec ima osnovna znaja iz ASP.NET-a.

Prvi zadatak je da kreiramo novu instancu nase MaliDucanDataContext klase (class), koja ce nam sluziti da obavimo sve LINQ operacije:

C#:
//Nova instanca DataContext klase
MaliDucanDataContext dc = new MaliDucanDataContext();

VB:
'Nova instanca DataContext klase
Dim dc As MaliDucanDataContext = New MaliDucanDataContext

Data za jedan proizvod iz baze podataka

Posto imamu instancu nase DataContext klase (class) sada mozemo da dobijemo data za jedan proizvod iz baze podataka:

C#:
//Data za jedan proizvod
var prod = dc.Proizvods.Single(p => p.ProizvodIme == "Pereca");

VB:
'Data za jedan proizvod
Dim prod = (From p In dc.Proizvods Where p.ProizvodIme = "Pereca").Single

Primjeticete da kada kucate dobijate sugestiju u - "intelisense" opcijama, LINQ to SQL je potpuno integrisan u VB i C# jezike i vecina gresaka (bugs) ce da budu otkrivene u dizajneru ili prilikom kompajliranja.

U ovom trenutku cemo malo da se vratimo na prvi post u seriji. nove dodatke .NET jezicima i analiziramo konstrukciju LINQ operacije. Primjeticete novu kljucnu rijec u C# var, koju slijedi ime variable. U VB koristimo standardnu kljucnu rijec Dim ali u obje deklaracije nemamo variable type. Variable type je automatski pripisana na osnovu konstrukcije na desnoj strani = znaka.

Ako dizajner/kompajler ne moze da pripise type, novi type bice pripisan prilikom kompilacije. Ova se osobina .NET jezika zove Anonimous type. Ista osobina jezika je koristena i prilikom deklaracije p in dc.Proizvods, gdje je p variabli pripisan type na osnovu dc.Proizvods kolekcije.

In i Where su pridodati LINQ- kao Extension methods (Vidi prvi post u seriji).

C# je isto tako karakteristican zbog upotrebe lambda expressions:
var prod = dc.Proizvods.Single(p => p.ProizvodIme == "Pereca");

p=>p.ProizvodIme == "Pereci" je lambda expression i znaci u ovom slucaju "Nadji mi proizvod p gdje p.ProizvodIme je jednak Pereci". Za sada je vazno da upamtite ovu konstrukciju a lamda expressions cemo da obradimo u posebnom postu. Ova sintaksa je karakteristicna za C# i ne moze se koristiti u VB.NET-u.

Pronadji proizvode u kategoriji

Vidjeli smo da LINQ to SQL OR mapper kreira asocijacije izmedju klasa(classes) na osnovu stranih kljuceva(foreign keys) u tabeli. To isto tako znaci da ce klasa koja ima strani kljuc (foreign key) u drugoj klasi imati kolekciju objekata iz te klase, a ta klasa ce imati "property" tipa prve klase. Tako na primjer mozemo na slijedeci nacin da dobijemo sve proizvode u odredjenoj kategoriji:

C#:
//Proizvodi u kategoriji
var pCat = from p in dc.Proizvods where p.Kategorija.KategorijaIme == "Peciva" select p;

VB:
'Proizvodi u kategoriji
Dim pKat = From p In dc.Proizvods Where p.Kategorija.KategorijaIme = "Peciva"

Pronadji jedan proizvod i promijeni cijenu
C#:
//Promijeni cijenu proizvodu
var prod1 = dc.Proizvods.Single(p => p.ProizvodIme == "Koka Kola");
prod1.ProizvodCijena = 5;
dc.SubmitChanges();


VB:
'Promijeni cijenu proizvodu
Dim prod1 = (From p In dc.Proizvods Where p.ProizvodIme = "Koka Kola").Single
prod1.ProizvodCijena = 5
dc.SubmitChanges() 
Dodaj novi proizvod u kategoriji
C#:
//Dodaj novi proizvod u kategoriju
Proizvod proiz = new Proizvod();
proiz.ProizvodCijena = 5;
proiz.ProizvodIme =
"Pita";
proiz.ProizvodOpis =
"Pita sa mesom takodjer poznata kao burek";

Kategorija kat =dc.Kategorijas.Single(k => k.KategorijaIme=="Peciva" ) ;
kat.Proizvods.Add(proiz);
dc.SubmitChanges();

VB:
'Dodaj novi proizvod u kategoriju
Dim proiz As Proizvod = New Proizvod
proiz.ProizvodCijena = 5
proiz.ProizvodIme =
"Pita"
proiz.ProizvodOpis = "Pita sa mesom takodjer zvana burek"

Dim kat = (From k In dc.Kategorijas Where k.KategorijaIme = "Peciva").Single
kat.Proizvods.Add(proiz)
dc.SubmitChanges()

Obrisi proizvod iz baze podataka

C#:
//obrisi proizvod iz baze podataka
Proizvod p2 = dc.Proizvods.Single(p => p.ProizvodIme == "Pita");
dc.Proizvods.DeleteOnSubmit(p2);
dc.SubmitChanges();

VB:
'Obrisi proizvod iz baze podataka
Dim p2 = (From p In dc.Proizvods Where p.ProizvodIme = "Pita").Single
dc.Proizvods.DeleteOnSubmit(p2)
dc.SubmitChanges()

U ovoj seriji smo obradili osnove LINQ-a i u buducim postovima obradicemo teme vezane za LINQ u vise detalja.

Mozete snimiti soluciju sa primjerima koristenim u ovoj seriji ako kliknete na jedan od linkova :

Projekti bez baze podataka (manja velicina fajla):

C#:
LINQTest.zip (52.64 kb)

VB.NET:
LINQTestVB.zip (85.47 kb)

Poslije otvaranja projekta dodajte bazu podataka MaliDucan.mdf kao sto je opisano u prvom dijelu serijala i u Query Anlyzer-u dodajte sledecu sql skriptu bazi podataka (dodaje tabele i podatke u tabelama):

MaliDucan.sql (9.35 kb)

Currently rated 3.0 by 1 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5