Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

LinqToDataSet – exemple si explicatii

    Continuam seria articolelor dedicate Linq in .Net Compact Framework cu Linq to DataSet.

LinqOnCF

Pentru a putea beneficia de facilitatile Linq in C# cand vom aplica Linq asupra DataSet-urilor, este nevoie de referinte catre urmatoarele assembly-uri:

System.Core.dll – defineste nucleul LINQ API. Este obligatoriu pentru a putea folosi LINQ.

System.Data.DataSetExtensions.dll – O extensie care integreaza tipurile ADO.NET cu Linq (Linq to DataSet).

     De cele mai multe ori, perspectiva dezvoltatorului in realizarea unei aplicatii  care lucreaza cu datele este urmatoarea:

  1. folosirea ADO.NET pentru obtinerea datelor dintr-o baza de date SQL
  2. stocarea datelor intr-un set de date (Linq to Dataset) sau in obiecte business realizate de el insusi (Linq to Objects)
  3. legarea (“bind”) datelor la controale
  4. validarea datelor
  5. folosirea serializarii XML pentru mutarea datelor aplicatiei
  6. actualizarea bazei de date.

     Asa cum scriam si in articolul precedent, surpriza neplacuta atunci cand vorbim de Linq in .Net Compact Framework este incapacitatea de a interoga direct o baza de date (nu este suportat Linq to Sql si nici Linq to Entities). Singurul mod de a interoga o baza de date din SQL Server Compact este a incarca mai intai datele intr-un DataSet.

     Un Dataset este un “cache in memory” care vine dintr-o sursa de date si este o componenta majora a arhitecturii ADO.NET.

     DataSet-ul este organizat asemanator cu o baza de date (tabele cu coloane, inregistrari, relatii intre aceste tabele).

     Un Dataset este constituit dintr-o colectie de obiecte de tip DataTable, care pot fi legate printr-un obiect de tip DataRelation.

     Cel mai important avantaj pe care il confera DataSet-ul este ca permite lucrul deconectat cu bazele de date. Luam spre exemplificare o aplicatie ale carei date din baza de date nu se modifica foarte frecvent. Aceastea pot fi tinute intr-un DataSet si sincronizate mai tarziu,  reducand incarcarea serverului de baze de date.

    Bineinteles ca un obiect Dataset trebuie mai intai populat inainte de a fi interogat cu Linq to Dataset. El se construieste prin crearea si umplerea cu date a fiecarui DataTable  cu ajutorul unui DataAdapter.

            //incarca tabelul STUDENT
            sTUDENTTableAdapter.Fill(fMIDataSet.STUDENT);

     Folosind Linq, se pot crea “query expressions” in C# (interogari similare cu cele din Sql, dar folosind operatorii speciali de interogare).

     Linq to DataSet se poate aplica asupra ambelor tipuri de DataSet-uri, tipizate sau netipizate. In exemplu, voi folosi unul tipizat:

ScreenHunter_01 May. 24 02.28

     Presupunem ca deja avem creat un obiect de tip DataSet, Student, in aplicatia noastra (vezi download). Vrem sa legam acesta sursa de date la un Combobox, iar ordonarea datelor si filtrarea sa le realizam cu Linq.

Exemplu:

            //ordonarea sursei de date dupa varsta
            sTUDENTBindingSource.DataSource = fMIDataSet.STUDENT.OrderBy(student=>student.AGE);

//ordonarea sursei de date dupa varsta si dupa nume
            sTUDENTBindingSource.DataSource = fMIDataSet.STUDENT.OrderBy(student=>student.AGE).ThenByDescending(student=>student.LASTNAME);

     Observatie: Ordonarea nu a fost facuta in interiorul tabelului, ci doar pentru afisare in control. Criteriul de sortare este specificat direct in cod si poate fi modificat la runtime.

            //filtrarea sursei de date dupa un criteriu
            sTUDENTBindingSource.DataSource = fMIDataSet.STUDENT.Where(student => student.AGE == 23);

     Ne putem crea un obiect al unei clase de o anumita structura, dar fara nume –anonim- (nici un obiect al unei alte clase nu va putea fi convertit la un obiect de tip anonim).

            //clasa anonima
            sTUDENTBindingSource.DataSource = fMIDataSet.STUDENT.Select
                (student=>new
                            {
                             LASTNAME = student.LASTNAME,
                             FIRSTNAME = student.FIRSTNAME
                            }
                );

     Pe langa operatorii standard de interogarii din Linq, Linq to DataSet aduce operatori specifici in cadrul folosirii unui set de obiecte de tip DataRow (operatori de comparare a unor inregistrari, metode care permit accesul la valorile coloanelor dintr-un DataRow).

     Linq to Dataset face parte din Linq to ADO.NET, alaturi de Linq to SQL (interogarea directa a bazelor de date SQL SERVER) si Linq to Entities (interogari asupra Entity Data Model).

     Linq to DataSet aduce imbunatatiri in munca dezvoltatorului. Verificarea sintaxei si consistenta tipurilor este facuta la compilare de catre Visual Studio.

     Linq ofera capacitati de interogare si manipulare a datelor intr-un mod rapid si eficient, eliminand problema diferitelor API-uri in functie de tipul de date.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*