Druhou variantou řešení je použít technologii LINQ. Tuto variantu si ukážeme nyní. Ukázkový příklad je možné stáhnout zde .
Jednou z novinek .NET Frameworku 3.5 byl i velmi diskutovaný LINQ. Ten do rodiny .NET jazyků přináší syntaxi jazyka SQL a také jeho funkčnost pro výběr a řazení dat.
Třetí generace Microsoft .NET Framework obsahuje techniku, která vývojářům dovoluje provádět operace nad daty v paměti mnohem jednodušším a efektivnějším způsobem a to pomocí dotazů podobných jazyku SQL. Jedná se o technologii LINQ (Language INtegrated Query). LINQ dovoluje dotazování, přidávání, filtrování, mazání a editaci dat v polích, kolekcích odvozených od generického rozhraní IEnumerable<T>, XML či SQL databázích. Dohromady tato technologie nabízí čtyři hlavní implementace:
Klíčová slova LINQ (http://cs.wikipedia.org/wiki/LINQ)
Obecná forma jednoduchého LINQ dotazu tedy vypadá podobně jako v tomto příkladu:
from [typ] proměnná in datový_zdroj
[where] podmínka_restrikce
[orderby] klíč_řazení [descending]
select výraz_projekce
Použité objekty je možné vidět na obr. .
Programový kód je vidět na obr. .
Celý programový kód je následující:
Public Class frm3Tabulky
Private Sub TblZakaznikBindingNavigatorSaveItem_Click(sender As System.Object, e As System.EventArgs) Handles TblZakaznikBindingNavigatorSaveItem.Click
Me.Validate()
Me.TblZakaznikBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.DsVzor)
End Sub
Private Sub frm3Tabulky_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'DsVzor.tblVyrobek' table. You can move, or remove it, as needed.
Me.TblVyrobekTableAdapter.Fill(Me.DsVzor.tblVyrobek)
'TODO: This line of code loads data into the 'DsVzor._tblPropojovaciZ_V' table. You can move, or remove it, as needed.
Me.TblPropojovaciZ_VTableAdapter.Fill(Me.DsVzor._tblPropojovaciZ_V)
'TODO: This line of code loads data into the 'DsVzor.tblZakaznik' table. You can move, or remove it, as needed.
Me.TblZakaznikTableAdapter.Fill(Me.DsVzor.tblZakaznik)
End Sub
Private Sub TblZakaznikBindingSource_PositionChanged(sender As Object, e As System.EventArgs) Handles TblZakaznikBindingSource.PositionChanged
'pomocí LINQ se vytvoří propojení 3 tabulek
Dim query =
From zak In DsVzor.tblZakaznik
Join prop In DsVzor._tblPropojovaciZ_V
On zak.Identifikacni_cislo_zakaznika Equals prop.Identifikacni_cislo_zakaznika
Join vyr In DsVzor.tblVyrobek
On prop.Cislo_vyrobku Equals vyr.Cislo_vyrobku
Where zak.Identifikacni_cislo_zakaznika = TblZakaznikBindingSource.Current("Identifikacni_cislo_zakaznika")
Select vyr.Cislo_vyrobku, vyr.Nazev_vyrobku, zak.Nazev_zakaznika 'seznam vybranych sloupecku z tohoto dotazu
'vložení dat do DataGridView
dgvZakaznikVyrobky.DataSource = query.ToList
'zobrazeni nazvu sloupecku
dgvZakaznikVyrobky.Columns(0).HeaderText = "Číslo výrobku"
dgvZakaznikVyrobky.Columns(1).HeaderText = "Název výrobku"
dgvZakaznikVyrobky.Columns(2).HeaderText = "Název zákazníka"
End Sub
End Class
V proceduře TblZakaznikBindingSource_PositionChanged je použit jazyk LINQ pro propojení 3 tabulek. Jak je vidět, dotaz je velice podobný jazyku SQL.
Použitý dotaz
Dim query = From zak In DsVzor.tblZakaznik Join prop In DsVzor._tblPropojovaciZ_V On zak.Identifikacni_cislo_zakaznika Equals prop.Identifikacni_cislo_zakaznika Join vyr In DsVzor.tblVyrobek On prop.Cislo_vyrobku Equals vyr.Cislo_vyrobku Where zak.Identifikacni_cislo_zakaznika = TblZakaznikBindingSource.Current("Identifikacni_cislo_zakaznika") Select vyr.Cislo_vyrobku, vyr.Nazev_vyrobku, zak.Nazev_zakaznika 'seznam vybranych sloupecku z tohoto dotazu |