1 / 24

Platformy technologiczne linq

Platformy technologiczne linq. mgr inż. Tomasz Gawron. 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

burke
Download Presentation

Platformy technologiczne linq

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Platformy technologicznelinq 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 Platformy Technologiczne 2012

  3. Architektura LINQ 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 • … Platformy Technologiczne 2012

  5. Dlaczego LINQ? 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 List<Customer> customers = newList<Customer>(); SqlConnection c = newSqlConnection(ConnectionString); SqlCommandcmd = newSqlCommand( @"SELECT c.Name, c.Phone, c.ID    FROMM Customers c    WHERE c.City = @po"); cmd.Parameters.AddWithValue("@p0", "USA"); DbDataReaderdr = cmd.ExecuteReader(); while (dr.Read()) { Customercust = newCustomer(); cust.CompanyName = dr.GetString(0); cust.ContactName = dr.GetString(1); cust.Country = dr.GetString(2); cust.CustomerID = dr.GetString(3); } dr.Close(); returncustomers; Platformy Technologiczne 2012

  6. Dlaczego LINQ? class Contact { … }; List<Contact> contacts = new List<Contacts>(); 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 wherec.State == "WA" select new { c.Name, c.Phone }; Platformy Technologiczne 2012

  7. Dlaczego LINQ? • 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 XQueryz poziomu języka • Rozszerzenia dla jezyków / API Platformy Technologiczne 2012

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

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

  10. Podstawowe operatory http://aspnetresources.com/downloads/linq_standard_query_operators.pdf Platformy Technologiczne 2012

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

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

  13. LINQ to SQL • 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 Platformy Technologiczne 2012

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

  15. LINQ to SQL • 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); } Platformy Technologiczne 2012

  16. LINQ to SQL • Insert • Dodanie obiektów do stworzonego modelu,a następnie wywołanieSubmitChangesna stworzonym obiekcieDataContext. PersonDataContextdbPeople = 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(); Platformy Technologiczne 2012

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

  18. LINQ to SQL • Delete • Usuwamy obiekt z kolekcji, następnie wołamy SubmitChangesna obiekcie typu DataContext. PersonDataContextdbPeople = 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(); } Platformy Technologiczne 2012

  19. LINQ to XML • 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 Platformy Technologiczne 2012

  20. LINQ to XML • 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 Platformy Technologiczne 2012

  21. Hierarchia klas Platformy Technologiczne 2012

  22. Przykład – tworzenie XML <contacts> <contact> <name>Great Food</name> <phone>555-7123</phone> </contact> … </contacts> • 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); XElement contacts = new XElement("contacts", from c in customers wherec.Country == "USA“ select new XElement("contact", new XElement("name", c.CompanyName), new XElement("phone", c.Phone) ) ); Platformy Technologiczne 2012

  23. Przykład – przeszukiwanie XML <?xml version="1.0" encoding="utf-8"?> <people> <person age="15"> <firstname>AAA</firstname> <lastname>XXX</lastname> </person> <person age="17"> <firstname>ABB</firstname> <lastname>YYY</lastname> </person> <person age="24"> <firstname>CCC</firstname> <lastname>ZZZ</lastname> </person> </people> //Using LINQ Extension Methods against an XML File XDocument people = XDocument.Load(@"C:\LINQToXML.xml"); //Casting to Xelement IEnumerable<XElement> 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; Platformy Technologiczne 2012

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

More Related