1 / 24

Understanding LINQ: A Comprehensive Guide to Querying Data in .NET

LINQ, introduced in .NET 3, unifies data access across various types, allowing simplified querying of objects, data, and XML through a SQL-like syntax independent of data sources. It supports querying collections implementing IEnumerable, like arrays and lists, and integrates with various providers such as LINQ to SQL, LINQ to XML, and Entity Framework. LINQ enhances code clarity and reduces errors with features like type checking and IntelliSense support. Learn about fundamental operators, query creation, and execution to fully leverage LINQ in your .NET applications.

Télécharger la présentation

Understanding LINQ: A Comprehensive Guide to Querying Data in .NET

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