Propojení 3 tabulek na formuláři
Řešení pomocí LINQ
 Tisk

Řešení pomocí LINQ

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 .

Teoretický úvod

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


Formulář

Použité objekty je možné vidět na obr. .

Programový kód

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.

šipka 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