Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

PLATFORMY TECHNOLOGICZNE LINQ mgr inż. Tomasz Gawron.

Podobne prezentacje


Prezentacja na temat: "PLATFORMY TECHNOLOGICZNE LINQ mgr inż. Tomasz Gawron."— Zapis prezentacji:

1 PLATFORMY TECHNOLOGICZNE LINQ mgr inż. Tomasz Gawron

2 Czym jest LINQ Wprowadzony w.NET 3 Daje możliwość unifikacji dostępu do różnego typu danych Uproszczone odpytywanie obiektów, daych i XML poprzez integrację zapytań z językiem programownia Umożliwia odpytywanie kolekcji implementujących IEnumerable<>, przykładowo tablicy, listy, XML DOM, tabel dazy danych Wprowadza zbliżoną do SQL składnię niezależną od źródła danych Oferuje sprawdzanie typów oraz dynamiczne tworzenie zapytań. Namespace System.Linq 2 Platformy Technologiczne 2012

3 Architektura LINQ 3 Platformy Technologiczne 2012

4 Providery LINQ Microsoft: LINQ to Objects LINQ to SQL LINQ to XML LINQ to DataSet LINQ to Entities (EntityFramework) ParallelLINQ Dostawcy zewnętrzni: LINQ to Amazon LINQ to NHibernate LINQ to Active Directory LINQ to Google LINQ to MySQL LINQ to Excel LINQ to Sharepoint … 4 Platformy Technologiczne 2012

5 Dlaczego LINQ? Platformy Technologiczne 2012 5 List customers = new List (); SqlConnection c = new SqlConnection(ConnectionString); SqlCommand cmd = new SqlCommand( @"SELECT c.Name, c.Phone, c.ID FROMM Customers c WHERE c.City = @po"); cmd.Parameters.AddWithValue("@p0", "USA"); DbDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Customer cust = new Customer(); cust.CompanyName = dr.GetString(0); cust.ContactName = dr.GetString(1); cust.Country = dr.GetString(2); cust.CustomerID = dr.GetString(3); } dr.Close(); return customers; List customers = new List (); SqlConnection c = new SqlConnection(ConnectionString); SqlCommand cmd = new SqlCommand( @"SELECT c.Name, c.Phone, c.ID FROMM Customers c WHERE c.City = @po"); cmd.Parameters.AddWithValue("@p0", "USA"); DbDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { Customer cust = new Customer(); cust.CompanyName = dr.GetString(0); cust.ContactName = dr.GetString(1); cust.Country = dr.GetString(2); cust.CustomerID = dr.GetString(3); } dr.Close(); return customers; Błędy: Błąd składniowy w SQL – FROMM Niepoprawna nazwa parametru – @po vs. @p0 (o vs. 0) Polecenie nie połączone z połączeniem Połącznie nie otworzone Połączenie nie zamknięte Elementy nie dodane do listy wynikowej Pobieramy większą liczbę niż zwraca select

6 Dlaczego LINQ? Platformy Technologiczne 2012 6 class Contact { … }; List contacts = new List (); foreach(Customer c in customers) { if(c.State == WA) { Contact ct = new Contact(); ct.Name = c.Name; ct.Phone = c.Phone; contacts.Add(ct); } var contacts = from c in customers where c.State == "WA" select new { c.Name, c.Phone };

7 Dlaczego LINQ? Platformy Technologiczne 2012 7 Zunifikowany dostęp do obiektów, obiektów relacyjnych, XML Sprawdzanie typów oraz wspacie IntelliSense Dostęp do funkcjonalności podobnych do SQL oraz XQuery z poziomu języka Rozszerzenia dla jezyków / API

8 Style zapytania Platformy Technologiczne 2012 8 W LINQ zapytania możemy tworzyć na 2 sposoby SQL – like W oparciu o metody IEnumerable tall = from p in people where p.Height > 200 select p; IEnumerable young = people.Where(p => p.Age p);

9 Elementy zapytania Platformy Technologiczne 2012 9 Każde zapytanie składa się z 3 niezależnych akcji: 1. Pobranie źródła danych. 2. Stworzenie zapytania. 3. Wykonanie zapytania. class IntroToLINQ { static void Main() { // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[5] { 0, 1, 2, 3, 4}; // 2. Query creation. // numQuery is an IEnumerable var numQuery = from num in numbers where (num % 2) == 0 select num; // 3. Query execution. foreach (int num in numQuery) { Console.Write("{0,1} ", num); }

10 Podstawowe operatory Platformy Technologiczne 2012 10 OperatorDziałanie WhereZwraca elementy, dla których warunek zwraca true SelectDla każdego elementu w kolekcji zwraca wartość przekazaną w operatorze FirstZwraca pierwszy element kolekcji LastZwraca ostatni element kolekcji SingleZwraca pojedynczy element kolekcji OrderBySortuje kolekcję wynikową zgodnie z zadanym predykatem DistinctUsuwa z kolekcji wynikowej duplikaty CountZwraca ilość rekordów w kolekcji wynikowej AverageZwraca średnią wartość dla pola kolekcji wynikowej JoinPozwala na złączenie dwóch kolekcji w oparciu o przekazane klucze http://aspnetresources.com/downloads/linq_standard_query_operators.pdf

11 LINQ to Objects Platformy Technologiczne 2012 11 using System; using System.Linq; using System.Collections.Generic; class app { static void Main() { string[] names = { "Burke", "Connor", "Frank", "Everett", "Albert, "George", "Harris", "David" }; Func filter = s => s.Length == 5; Func extract = s => s; Func project = s => s.ToUpper(); IEnumerable expr = names.Where(filter).OrderBy(extract).Select(project); foreach (string item in expr) Console.WriteLine(item); }

12 LINQ to DataSet Platformy Technologiczne 2012 12 DataSet w pełni zintegrowany z LINQ Działa dla DataSet typowanego i nietypowanego Łączenie, grupowanie danych w DataTable Tworzenie widoków na wielu DataTable DataSet ds = new DataSet(); FillTheDataSet(ds); DataTable dtPeople = ds.Tables["People"]; IEnumerable query = from people In dtPeople.AsEnumerable() select people; foreach (DataRow p in query) Response.Write(p.Field (FirstName"));

13 LINQ to SQL Platformy Technologiczne 2012 13 Zapewnia mapowanie obiektowo - relacyjne (ORM) z.NET Framework dla baz Microsoft SQL Server Użycie silnie typowanych danych Zintegrowany dostęp do danych Mapowanie tabel i wierszy na klasy i obiekty Zbudowane na ADO.NET Mapowanie Poprzez atrybuty lub zewnętrznie Ręcznie lub poprzez designer Relacje mapują się na properties Persistence Sledzenie zmian Aktualizacja poprzez SQL

14 LINQ to SQL Platformy Technologiczne 2012 14 SQL Server LINQ to SQL from c in db.Customers where c.City == "London" select c.CompanyName LINQ Query SQL Query SELECT CompanyName FROM Cust WHERE City = 'London' Wiersze Obiekty SubmitChanges() DML / Procedura składowana db.Customers.Add(c1); c2.City = Seattle"; db.Customers.Remove(c3); INSERT INTO Customers… UPDATE Customers … DELETE FROM Customers … Aplikacja

15 LINQ to SQL Platformy Technologiczne 2012 15 Select Pobieranie wierszy jest osiągane poprzez pisanie zapytania w dowolnym języku oraz jego wykonanie. Za translację na zapytanie SQL odpowiedzialna jest warstwa LINQ to SQL PersonDataClassesDataContext dbPeople = new PersonDataClassesDataContext(); var query = from p in dbPeople.Peoples where p.Age > 18 select p; foreach (var ppl in query) { Response.Write(ppl.FirstName); }

16 LINQ to SQL Platformy Technologiczne 2012 16 Insert Dodanie obiektów do stworzonego modelu,a następnie wywołanie SubmitChanges na stworzonym obiekcie DataContext. PersonDataContext dbPeople = new PersonDataContext(); People p = new People() {FirstName = "Gyan", LastName = "Singh", Age = 33}; dbPeople.Peoples.InsertOnSubmit(p); // At this point, the new People object is added in the object model. // In LINQ to SQL, the change is not sent to the database until SubmitChanges is called. dbPeople.SubmitChanges();

17 LINQ to SQL Platformy Technologiczne 2012 17 Update Pobierany wartość z bazy i edytujemy jej wartość w przypisanym obiekcie. Po dokonaniu zmian wywołujemy SubmitChanges na obiekcie typu DataContext. PersonDataContext dbPeople = new PersonDataContext(); var query = from p in dbPeople.Peoples select p; var intAge = 18; foreach (var ppl in query){ ppl.Age = intAge; intAge++; } dbPeople.SubmitChanges();

18 LINQ to SQL Platformy Technologiczne 2012 18 Delete Usuwamy obiekt z kolekcji, następnie wołamy SubmitChanges na obiekcie typu DataContext. PersonDataContext dbPeople = new PersonDataContext(); var query = from p in dbPeople.Peoples where p.PersonID == 1 select p; if (query.Count() > 0) { dbPeople.Peoples.DeleteOnSubmit(query.First()); dbPeople.SubmitChanges(); }

19 LINQ to XML Platformy Technologiczne 2012 19 Stworzony by umożliwić korzystanie z XML bez konieczności poznawania Xpath/XSLT Umożliwia przetwarzanie w pamięci dokumentu XML w celu pobrania kolekcji elementów i atrybutów Tworzenie zapytań z wieloma źródłami danych Możliwość użycia wyników jako parametrów dla Xelement lub Xattribute Tworzenie drzew XML Wydajniejszy niż XPath Łatwiejszy i bogatszy niż niskopoziomowe sposoby

20 LINQ to XML Platformy Technologiczne 2012 20 Podstawowe klasy (System.Xml.Linq) XElement – reprezentuje węzeł w strukturze DOM, dokument XML składa się z drzewa XElement XAttribute – reprezentuje atrybuty XML XNamespace – reprezentuje namespace XML XName XDocument – reprezentuje kompletny dokument XML

21 Hierarchia klas Platformy Technologiczne 2012 21

22 Przykład – tworzenie XML Platformy Technologiczne 2012 22 TodayXmlDocument doc = new XmlDocument(); XmlElement contacts = doc.CreateElement("contacts"); foreach (Customer c in customers) if (c.Country == "USA") { XmlElement e = doc.CreateElement("contact"); XmlElement name = doc.CreateElement("name"); name.InnerText = c.CompanyName; e.AppendChild(name); XmlElement phone = doc.CreateElement("phone"); phone.InnerText = c.Phone; e.AppendChild(phone); contacts.AppendChild(e); } doc.AppendChild(contacts); Great Food 555-7123 … XElement contacts = new XElement("contacts", from c in customers where c.Country == "USA select new XElement("contact", new XElement("name", c.CompanyName), new XElement("phone", c.Phone) ) );

23 Przykład – przeszukiwanie XML Platformy Technologiczne 2012 23 AAA XXX ABB YYY CCC ZZZ //Using LINQ Extension Methods against an XML File XDocument people = XDocument.Load(@"C:\LINQToXML.xml"); //Casting to Xelement IEnumerable xmlResult; xmlResult = people.Descendants("person").Where(p => p.Element("firstname").Value.StartsWith("A")); //Total count of records. txtResultCount.Text = xmlResult.Count().ToString(); //Person First Name. txtPersonFirstName.Text = xmlResult.First().FirstNode; //Person Last Name. txtPersonLastName.text = xmlResult.First().LastNode;

24 LINQ to XML - wydajność Platformy Technologiczne 2012 24 Liczba operacji na sekundę

25 Parallel LINQ Platformy Technologiczne 2012 25 Umożliwia równoległe wykonywanie zapytania Zapytanie najpierw podlega analizie Wyniki muszą być scalone w pętli foreach


Pobierz ppt "PLATFORMY TECHNOLOGICZNE LINQ mgr inż. Tomasz Gawron."

Podobne prezentacje


Reklamy Google