C_3_0_i_NET_3_5_Technologia_LINQ_cshtec.pdf
(
735 KB
)
Pobierz
C# 3.0 i .NET 3.5. Technologia LINQ
C# 3.0 i .NET 3.5.
Autor: Jacek Matulewski
ISBN: 83-246-1447-8
Format: 158x235, stron: 88
Wydawnictwo Helion
ul. Koľciuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
Poznaj technologiķ LINQ
aby uzyskaě swobodny dostķp do danych z SQL Server, pliku XML lub kolekcji
z poziomu swoich programw
¤
Bezpieczny dostķp do danych przy zachowaniu kontroli typw
¤
Tworzenie zapytaĺ LINQ
¤
Budowanie, analiza i pobieranie danych z plikw XML
Zastosowanie technologii LINQ (ang. Language-Integrated Query, zintegrowany jķzyk
zapytaĺ) w zasadniczy sposb upraszcza projektowanie aplikacji bazodanowych.
Zapytanie LINQ zwraca kolekcjķ z przestrzeni nazw typw oglnych. Kolekcja ta moŃe
byě modyfikowana, a nastķpnie zwrcona do łrdĀa. Dziķki temu zachowywana jest
peĀna kontrola typw danych i ich konwersji w poszczeglnych mechanizmach
poľredniczĴcych w pobieraniu danych.
KsiĴŃka âC# 3.0 i .NET 3.5. Technologia LINQÒ prezentuje prosty sposb korzystania
ze zintegrowanego jķzyka zapytaĺ. Dziķki temu podrķcznikowi nauczysz siķ pobieraě
dane z rŃnego rodzaju łrdeĀ; tworzyě pliki XML w nowy, bardziej intuicyjny sposb;
stosowaě skĀadowane rozszerzenia ? nowego typu metody (oraz odpowiadajĴce
im operatory), zdefiniowane w najnowszej wersji jķzyka C#. Ponadto dowiesz siķ,
jak tworzyě wĀasne łrdĀa danych LINQ. Krtko mwiĴc, z ksiĴŃkĴ âC# 3.0 i .NET 3.5.
Technologia LINQÒ nawet jako ľrednio zaawansowany programista poradzisz sobie
ze stworzeniem bardzo skomplikowanych aplikacji bazodanowych.
¤
WyraŃenia Lambda
¤
Nowe operatory LINQ
¤
Zapytania LINQ
¤
LINQ to DataSet
¤
Aktualizacja danych w bazie
¤
Korzystanie z rozszerzeĺ
¤
Kontrolka LinqDataSource
¤
Tworzenie i modyfikacja pliku XML
¤
Tworzenie łrdeĀ danych LINQ
Ta ksiĴŃka wskaŃe Ci
prosty sposb tworzenia
doskonaĀych
i nowoczesnych aplikacji bazodanowych
Technologia LINQ
Spis treci
Wstp .............................................................................................. 5
Rozdzia 1. Nowoci jzyka C# 3.0 ..................................................................... 7
Okrelanie typu zmiennej lokalnej przy inicjalizacji ........................................................ 7
Wyraenia Lambda ........................................................................................................... 8
Rozszerzenia ...................................................................................................................10
Nowa forma inicjalizacji obiektów i tablic ..................................................................... 12
Nowe operatory LINQ .................................................................................................... 13
Typy anonimowe ............................................................................................................ 14
Przykad — kolekcja jako ródo danych ....................................................................... 14
Rozdzia 2. LINQ i ADO.NET .............................................................................. 21
Konfiguracja kontrolki DataSet ...................................................................................... 22
LINQ to DataSet, czyli tam i z powrotem .......................................................................... 24
Korzyci z LINQ to DataSet ........................................................................................... 26
Rozdzia 3. LINQ i SQL Server ........................................................................... 29
Klasa encji ...................................................................................................................... 29
Pobieranie danych .......................................................................................................... 31
Aktualizacja danych w bazie .......................................................................................... 32
Wizualne projektowanie klasy encji ............................................................................... 35
Korzystanie z procedur skadowanych ........................................................................... 44
Kontrolka LinqDataSource (ASP.NET) ......................................................................... 47
Rozdzia 4. LINQ i XML .................................................................................... 51
Tworzenie pliku XML za pomoc klas XDocument i XElement ................................... 51
Pobieranie wartoci z elementów o znanej pozycji w drzewie ....................................... 54
Przenoszenie danych z kolekcji do pliku XML .............................................................. 55
Przenoszenie danych z bazy danych (komponentu DataSet) do pliku XML .................. 56
Zapytania LINQ .............................................................................................................. 57
Modyfikacja pliku XML ................................................................................................. 59
Rozdzia 5. Tworzenie róde danych LINQ ......................................................... 61
IEnumerable ................................................................................................................... 61
IEnumerable<T> ............................................................................................................ 63
Oddzielenie róda od jego interfejsu ............................................................................. 65
IQueryable i IOrderedQueryable .................................................................................... 68
4
C# 3.0 i .NET 3.5. Technologia LINQ
IQueryable<T> i IOrderedQueryable<T> ...................................................................... 69
Drzewo wyraenia .......................................................................................................... 71
Zadanie. LINQ to TXT ................................................................................................... 78
Dodatek A Wicej w sieci… ............................................................................ 83
Skorowidz ...................................................................................... 85
Rozdzia 3.
LINQ i SQL Server
Wspominaj c o technologii LINQ, mówi si# zazwyczaj o zanurzeniu j#zyka SQL w j#-
zyku C#. W przypadku
LINQ to SQL
zanurzenie to mo%na rozumie& niemal dos'ownie
— zapytanie LINQ jest w tym przypadku t'umaczone bezpo)rednio na zapytanie SQL
wysy'ane do bazy danych.
Zacznijmy od prostej sytuacji: po' czmy si# z baz danych
Telefony.mdf
(zob. rysunek 2.3
z poprzedniego rozdzia'u) i pobierzmy z niej list# osób pe'noletnich. Wykorzystamy do
tego obiekt klasy
DataContext
, która jak na razie wspó'pracuje tylko z bazami SQL Server
(nie dotyczy to jednak lokalnych baz SQL Server Compact Edition). Klasa
DataContext
jest g'ówn bram do technologii
LINQ to SQL
. Brama ta wymaga jednak stra%nika. Jego
rol# przejmuje klasa encji, tj. klasa C#, która zdefiniuje typ ka%dego rekordu (encji) tabeli
bazy danych. Dzi#ki tej klasie mo%liwe jest zbudowanie pomostu mi#dzy tabel pobie-
ran za pomoc zapytania SQL a kolekcj zwracan przez zapytanie LINQ, tj. mi#dzy
typem encji a typem elementu kolekcji. Dzi#ki tej klasie w zapytaniu LINQ mo%emy
u%ywa& nazw pól, które obecne s w tabeli, wr#cz identyfikowa& kolekcj# z tabel .
Zanim przejdziemy do konkretów, chcia'bym jeszcze zwróci& uwag# Czytelnika na je-
den istotny fakt. W
LINQ to Object
, które poznali)my w pierwszym rozdziale, 0ród'em
danych by'a kolekcja istniej ca w pami#ci i w pe'ni dost#pna z poziomu programu. Nie
by'o zatem konieczno)ci odwo'ywania do zasobów zewn#trznych (np. plików bazy danych).
Dzi#ki temu ca'y kod aplikacji móg' by& skompilowany do kodu po)redniego. W przy-
padku
LINQ to SQL
, którym zajmiemy si# w tym rozdziale, lub
LINQ to XML
, omówio-
nego w kolejnym rozdziale, taka pe'na kompilacja nie jest mo%liwa. Analiza danych
pobranych ze 0ród'a danych mo%e odby& si# dopiero w trakcie dzia'ania programu.
Realizowane jest to za pomoc drzewa zapyta1, które poznamy dok'adniej w ostatnim
rozdziale, przy okazji projektowania w'asnego 0ród'a danych LINQ.
Klasa encji
Klasa encji (ang.
entity class
) to zwyk'a klasa C#, w której za pomoc atrybutów po-
wi zane s pola klasy z polami tabeli (kolumnami). Mamy wi#c do czynienia z mode-
lowaniem zawarto)ci relacyjnej bazy danych w typowanych klasach j#zyka, w którym
30
C# 3.0 i .NET 3.5. Technologia LINQ
przygotowujemy program. W tym kontek)cie u%ywany jest angielski termin
strongly
typed
, który podkre)la izomorficzno)& relacji klasy encji i struktury tabeli. Ów zwi -
zek jest niezwykle istotny — przede wszystkim umo%liwia kontrol# typów, która
w pewnym sensie rozci ga si# na po' czenie z baz danych. Dzi#ki tej relacji progra-
mista mo%e w pewnym stopniu uto%samia& t# klas# i reprezentowan przez ni tabel#.
To pozwala równie% przygotowywa& zapytania LINQ, korzystaj c z nazw pól tabeli
— jego t'umaczenie na zapytanie SQL jest dzi#ki temu szczególnie proste, a jedno-
cze)nie w pe'ni zachowana jest kontrola typów. Domy)lne wi zanie realizowane jest
na podstawie nazw obu pól. Mo%liwa jest jednak zmiana tego domy)lnego sposobu
wi zania oraz zmiana w'asno)ci poszczególnych pól.
Przed ca' klas znale0& si# powinien atrybut
Table
z przestrzeni nazw
System.Data.
Linq.Mapping
, w którym wskazujemy nazw# tabeli z bazy danych
1
. Natomiast przed
polami odpowiadaj cymi kolumnom w tabeli nale%y umie)ci& atrybut
Column
(z tej sa-
mej przestrzeni nazw), w którym mo%emy wskaza& m.in. nazw# kolumny w tabeli (pa-
rametr
Name
), poinformowa& go, czy jest kluczem g'ównym (
IsPrimaryKey
) lub czy mo%e
przyjmowa& puste warto)ci (
CanBeNull
). Listing 3.1 zawiera przyk'ad klasy encji,
w której definiujemy typ rekordu z tabeli
ListaOsob
z bazy danych
Telefony.mdf
zna-
nej z poprzedniego rozdzia'u.
2
Listing 3.1.
Klasa encji zwi1zana z tabel1 ListaOsob z bazy Telefony.mdf
[Table(Name = "ListaOsob")]
public class Osoba
{
[Column(Name = "Id", IsPrimaryKey = true)]
public int Id;
[Column(Name = "Imi2", CanBeNull = false)]
public string Imi.;
[Column(Name = "Nazwisko", CanBeNull = false)]
public string Nazwisko;
[Column]
public int NumerTelefonu;
[Column]
public int Wiek;
}
W powy%szym listingu wi zanie klasy ze struktur bazy danych przeprowadzane zo-
staje na podstawie atrybutów do' czanych do definicji klasy. W terminologii Microsoft
nazywane jest to mapowaniem opartym na atrybutach (ang.
attribute-based mapping
).
1
Klasy z przestrzeni nazw
System.Data.Linq
i jej podprzestrzeni, m.in. z
System.Data.Linq.Mapping
,
do której nale%y klasa
Table
, zdefiniowane s w osobnej bibliotece
System.Data.Linq.dll
, nale% cej
do zbioru bibliotek platformy .NET 3.5. Domy)lnie nie jest ona w' czana do zbioru bibliotek projektu.
Nale%y j zatem doda& samodzielnie, korzystaj c z polecenia
Project
,
Add Reference…
. Omówione
ni%ej narz#dzie wizualnego projektowania klas encji zwolni nas z tego obowi zku.
2
Tworz c tabel# w bazie SQL Server mogli)my zezwoli&, aby niektóre jej pola dopuszcza'y pust warto)&.
Definiuj c klas# encji warto zadeklarowa& odpowiadaj ce im pola klasy w taki sposób, aby dopuszcza'y
przypisanie warto)ci
null
. W przypadku 'a1cuchów nie ma problemu – typ
String
jest typem referencyjnym
i zawsze mo%na mu przypisa& warto)&
null
. Inaczej wygl da to np. w przypadku typu
int
, który jest typem
warto)ciowym. Nale%y wówczas w deklaracji pola wykorzysta& typ parametryczny
Nullable<int>
.
Plik z chomika:
sq9nip
Inne pliki z tego folderu:
Visio_2002_dla_kazdego_vis22k.pdf
(1008 KB)
Vademecum_hakera_Zabezpieczenia_w_Windows_vahawi.pdf
(1381 KB)
Vademecum_hakera_Edycja_plikow_binarnych_vahace.pdf
(239 KB)
USB_Praktyczne_programowanie_z_Windows_API_w_C_usbppr.pdf
(574 KB)
UNIX_Sztuka_programowania_unszpr.pdf
(532 KB)
Inne foldery tego chomika:
Acrobat
After Effects
Bezpieczeństwo Sieci
Bezpieczeństwo Systemów
Bezpieczeństwo WWW
Zgłoś jeśli
naruszono regulamin