LINQ Project

17
LINQ Project .NET Language Integrated Query Hubert Górniak

description

LINQ Project. .NET Language Integrated Query Hubert Górniak. Plan prezentacji. Wstęp Pomysł na LINQ Prosty przykład Lambda expressions Inicjalizacja złożonych wartości Integracja z SQL (DLinq) Podsumowanie. Wstęp. LINQ definiuje standardowe operatory kwerend - PowerPoint PPT Presentation

Transcript of LINQ Project

Page 1: LINQ Project

LINQ Project.NET Language Integrated

QueryHubert Górniak

Page 2: LINQ Project

Plan prezentacji

WstępPomysł na LINQProsty przykładLambda expressionsInicjalizacja złożonych wartościIntegracja z SQL (DLinq)Podsumowanie

Page 3: LINQ Project

Wstęp

LINQ definiuje standardowe operatory kwerend

Umożliwia językom filtrowanie, enumeracje i tworzenie projekcji różnych kolekcji używając tej samej składni

Page 4: LINQ Project

Pomysł na LINQ

Programując obiektowo używamy klas, obiektów i metod

Używamy informacji z różnych źródełLINQ to uproszczenie i ujednolicenie

dostępu i integracji do informacji nieobiektowej

Najczęściej do relacyjnych baz danych i plików XML

Page 5: LINQ Project

Pomysł na LINQ

Zamiast dodawać relacyjne lub XML’ owe właściwości do naszych programów używamy ułatwień w postaci ogólnych kwerend

Page 6: LINQ Project

Prosty przykład Używając standardowych operatorów kwerend w C# 3.0:using System;using System.Query;using System.Collections.Generic;class app {

static void Main() {string[] names = { "Burke", "Connor",

"Frank", "Everett", "Albert", "George", "Harris", "David" };

IEnumerable<string> expr = from s in names where s.Length == 5

orderby s select s.ToUpper();

foreach (string item in expr) Console.WriteLine(item);

}} Po przetworzeniu tablicy otrzymujemy:BURKE DAVID FRANK

Page 7: LINQ Project

Prosty przykład

Inicjalizacja zmiennej przez query expression Query expression przetwarza jedno lub wiele

źródeł danych używając różnych query operators

Wyrażenie w przykładzie używa operatorów: Where OrderBy Select

Wyrażenie napisane jest w query syntax

Page 8: LINQ Project

Prosty przykład

Możliwe jest zapisanie wyrażenie w składni z „.”

IEnumerable<string> expr = names.Where(s => s.Length == 5).OrderBy(s => s).Select(s => s.ToUpper());

Argumenty operatorów nazywane są lambda expressions

Page 9: LINQ Project

Lambda expressions

Operatory umożliwiają użycie funkcji jako argumentów

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);

Page 10: LINQ Project

Lambda expressions

Podobne do metod anonimowych

Func<string, bool> filter = delegate (string s) {return s.Length == 5;

};Func<string, string> extract = delegate (string s) {

return s;}; Func<string, string> project = delegate (string s) {

return s.ToUpper();};

Page 11: LINQ Project

Inicjalizacja złożonych wartościZakładając że dany jest typ:public class Person { string name; int age; bool canCode; public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } public bool CanCode { get { return canCode; } set { canCode = value; } }}

Person value = new Person { Name = "Chris Smith", Age = 31, CanCode = false};

Możemy dokonać inicjalizacji w następujący sposób:

Page 12: LINQ Project

Integracja z SQL (DLinq)

Możliwość tworzenia zapytań do relacyjnych źródeł

W środowisku projektowymAtrybuty [Table] i [Column] definiują typy

CLR odpowiadające definicjom SQL Schema

Page 13: LINQ Project

Integracja z SQL (DLinq)

Możliwość tworzenia zapytań do relacyjnych źródeł

Page 14: LINQ Project

Integracja z SQL (DLinq)

Przykładowa definicja SQL:create table People ( Name nvarchar(32) primary key not null, Age int not null, CanCode bit not null)create table Orders ( OrderID nvarchar(32) primary key not null, Customer nvarchar(32) not null, Amount int)

Page 15: LINQ Project

Integracja z SQL (DLinq)

Jedyne czego potrzebujemy to:[Table(Name="People")]public class Person { [Column(DbType="nvarchar(32) not null", Id=true)] public string Name; [Column] public int Age; [Column] public bool CanCode;}[Table(Name="Orders")]public class Order { [Column(DbType="nvarchar(32) not null", Id=true)] public string OrderID; [Column(DbType="nvarchar(32) not null")] public string Customer; [Column] public int? Amount; }

Page 16: LINQ Project

Integracja z SQL (DLinq)

Aby móc korzystać z mocy DLinq// tworzymy zapytanievar query = from c in custs from o in orders where o.Customer == c.Name select new { c.Name, o.OrderID, o.Amount, c.Age };// i wywolujemyforeach (var item in query) Console.WriteLine("{0} {1} {2} {3}", item.Name, item.OrderID, item.Amount, item.Age);

Page 17: LINQ Project

Podsumowanie

Linq prezentuje ciekawe podejście do przetwarzania nieobiektowych danych