net 3.0 & linq

58
.NET 3.0 и LINQ Константин Кичинский [email protected] http://zelo-stroi.livejournal.com

Upload: constantin-kichinsky

Post on 30-Nov-2014

4.183 views

Category:

Technology


2 download

DESCRIPTION

.NET 3.0 & LINQ, Константин Кичинский, Клуб MAInfo.ru

TRANSCRIPT

Page 1: Net 3.0 & Linq

.NET 3.0 и LINQ

Константин Кичинский[email protected]://zelo-stroi.livejournal.com

Page 2: Net 3.0 & Linq

.NET 3.0 и LINQобзор

Page 3: Net 3.0 & Linq

.NET 3.0 и LINQобзор обзор

Page 4: Net 3.0 & Linq

.NET 3.0 и LINQобзор обзор

.NET 3.5

Page 5: Net 3.0 & Linq

.NET

Page 6: Net 3.0 & Linq

.NET

Page 7: Net 3.0 & Linq

.NET

Page 8: Net 3.0 & Linq

.NET

Page 9: Net 3.0 & Linq

.NET

Page 10: Net 3.0 & Linq

.NET

Page 11: Net 3.0 & Linq

.NET

Page 12: Net 3.0 & Linq

.NET

Page 13: Net 3.0 & Linq

Windows Presentation

Foundation

Page 14: Net 3.0 & Linq

Эффективность работы пользователей

Page 15: Net 3.0 & Linq

Эффективность работы пользователей

Page 16: Net 3.0 & Linq

Эффективность работы пользователей

Page 17: Net 3.0 & Linq

Эффективность работы пользователей

Page 18: Net 3.0 & Linq

Эффективность работы пользователей

Page 19: Net 3.0 & Linq

Эффективность работы пользователей

Page 20: Net 3.0 & Linq

Эффективность работы пользователей

Page 21: Net 3.0 & Linq

Преимущества для пользователя

ИнтерактивностьОптимизация под форм факторы

ЧитабельностьПроизводительность – GPUКрасота - эмоциональность

Преимущества для разработчикаПростота разработкиУниверсальность работы с графикой & MediaБогатство возможностей платформыИнструментарий

Эффект UX

МотивацияПродуктивность

УдовлетворенностьПоложительные эмоции

Повторное использование

User Experience в ПО, как выйти на новый уровень?

Windows VistaWindows Vista Office 2007Office 2007

Page 22: Net 3.0 & Linq

Эволюция программного обеспечения

GDI/GDI+•Радует нас уже второе десятилетие•Гибкость даётся большими усилиями•Сложно реализовывать динамический интерфейс•Полноценно не использует возможности GPU

Windows 1.0 Windows 3.0 Windows 95 Windows XP

Page 23: Net 3.0 & Linq

Проблемы разработки интерфейса

• Разработчики и дизайнеры• Функционал и красота

• UX не считается важным требованием

• Корпоративные приложения (фокус – функционал)

• Сложность разработки!!!

Page 24: Net 3.0 & Linq

Windows Presentation Foundation

• Универсальность подхода к работе с пользовательским интерфейсом, документами и медиа-источниками

• Интегрирования, векторная подсистема отрисовки– Использование ресурсов GPU

• Декларативная разработка– Вовлечение дизайнеров в

разработку реальных интерфейсов

• Легкость разворачивания– Возможность администраторам

легко и безопасно разворачивать и управлять приложениями

Page 25: Net 3.0 & Linq

Взаимодействие дизайнера и разработчика

Создает дизайнСоздает дизайн Добавляет бизнес логикуДобавляет бизнес логику

Дизайнер Разработчик

Page 26: Net 3.0 & Linq

Взаимодействие дизайнера и разработчика

Дизайнер Разработчик

Page 27: Net 3.0 & Linq

Взаимодействие дизайнера и разработчика

Дизайнер Разработчик

Page 28: Net 3.0 & Linq

Взаимодействие дизайнера и разработчика

С помощью С помощью XAML XAML дизайнерыдизайнеры и разработчики и разработчики

могут выйти на новый могут выйти на новый уровень взаимодействияуровень взаимодействия

Дизайнер Разработчик

Page 29: Net 3.0 & Linq

Взаимодействие дизайнера и разработчика

• Инструментарий Инструментарий Microsoft Microsoft для для дизайнеров и разработчиковдизайнеров и разработчиков

• Декларативная разработка с помощью Декларативная разработка с помощью XAMLXAML

• Инструменты других производителейИнструменты других производителей (e.g. Aurora by Mobiform, ZAM 3D by (e.g. Aurora by Mobiform, ZAM 3D by Electric Rain)Electric Rain)

Дизайнер Разработчик

Page 30: Net 3.0 & Linq

Представление интерфейса с помощью XAML

XAML = Extensive Application Markup Language

•Легко инструментируемый язык, декларативная разметка•Разделение кода и представления•Может функционировать в browser или как в

скомпилированном виде независимое приложение

<Button Width="100"> OK <Button.Background> LightBlue </Button.Background></Button>

XAML

Button b1 = new Button();b1.Content = "OK";b1.Background = new SolidColorBrush(Colors.LightBlue);b1.Width = 100;

C#

Dim b1 As New Buttonb1.Content = "OK"b1.Background = New _ SolidColorBrush(Colors.LightBlue)b1.Width = 100

VB.NET

Page 31: Net 3.0 & Linq

Property Engine

Input / Eventing System

.NET Framework 2.0

Desktop Windows Manager

Media Integration Layer

DirectX

Windows Vista Display Driver (LDDM)

Windows Media Foundation

Composition Engine

Print Spooler

ManagedUnmanaged

Application Services

Deployment Services

Databinding

USER INTERFACE SERVICES

XAML

Accessibility

Property System

Input & Eventing

BASE SERVICES

DOCUMENT SERVICES

Packaging Services

XPS Documents

Animation

2D

3D

AudioImaging

Text

VideoEffects

Composition Engine

MEDIA INTEGRATION LAYER

Controls

Layout

Win

dow

s Pr

esen

tatio

n Fo

unda

tion

XPS

View

er

Page 32: Net 3.0 & Linq

Application Services

Deployment Services

Databinding

USER INTERFACE SERVICES

XAML

Accessibility

Property System

Input & Eventing

BASE SERVICES

DOCUMENT SERVICES

Packaging Services

XPS Documents

Animation

2D

3D

AudioImaging

Text

VideoEffects

Composition Engine

MEDIA INTEGRATION LAYER

Controls

Layout

Архитектура WPF

Page 33: Net 3.0 & Linq

Что дает WPF• DirectX (Direct 3D vector) rendering• Layouts• Библиотека элементов управления (Controls library)

– Events routing• Animations• Styles• DataBinding• Visual Brush• Media• Text• Reading• 3D

Page 34: Net 3.0 & Linq

Где найти?

• http://netfx3.com• http://windowsclient.net/

• Expression Studiohttp://microsoft.com/expression/

• Visual Studio 2008 “Orcas”http://msdn2.microsoft.com/en-us/evalcenter/bb655864.aspx

Page 35: Net 3.0 & Linq

WCF & WWF

&CardSpace

.NET 3.0 Part 2

Следующая пятница!

Page 36: Net 3.0 & Linq

.NET 3.0 и LINQобзор обзор

Page 37: Net 3.0 & Linq

Эволюция C#

C# 1.0

C# 2.0

C# 3.0

Управляемый код (сборка мусора, reflection, …)

Generics (родовое программирование, статическая параметризация типов)

Декларативное программированиеLanguage Integrated Query

Page 38: Net 3.0 & Linq

Что же нового в C# 3.0?

Page 39: Net 3.0 & Linq

LINQ

Page 40: Net 3.0 & Linq

Language Integrated Query

LINQ LINQ to to

EntitiesEntities

LINQ LINQ to to

EntitiesEntities

LINQ LINQ ToTo

SQLSQL

LINQ LINQ ToTo

SQLSQL

LINQLINQ toto

XMLXML

LINQLINQ toto

XMLXML

C# C# C# C# VB.NetVB.NetVB.NetVB.Net Others…Others…Others…Others…

LINQ LINQ ToTo

DatasetDataset

LINQ LINQ ToTo

DatasetDataset

LINQ LINQ ToTo

ObjectsObjects

LINQ LINQ ToTo

ObjectsObjects

LINQ-enabled ADO.NET

Page 41: Net 3.0 & Linq

Query Expressionsvar L = new List<Person> {

new Person{ Name="Vasya", Age=16, Speciality=1 }, new Person{ Name="Petya", Age=20, Speciality=2 },new Person{ Name="Kolya", Age=20, Speciality=1 } };

var Spec = new List<Speciality>{ new Speciality{Code=1, Title="Math"}, new Speciality{Code=2, Title="CS"} };

var res = from x in L where x.Age>16 select x.Name;

var res = from s in L join sp in Spec on s.Speciality equals sp.Code select new { s.Name, sp.Title };

var res2 = from s in L group s by s.Speciality into g select new { SpecCode=g.Key, NoOfStudents = g.Count(),

Students = from x in g select x };

Page 42: Net 3.0 & Linq

Query Expressions — синтаксис

from id in source{ from id in source | join id in source on expr equals expr [ into id ] | let id = expr | where condition | orderby ordering, ordering, … } select expr | group expr by key[ into id query ]

Начинается с fromНачинается с from

0 или более from, join, let, where или orderby

0 или более from, join, let, where или orderby

Заканчивается select или group byЗаканчивается select или group by

into позволяет продолжить запрос

into позволяет продолжить запрос

Page 43: Net 3.0 & Linq

ОперацииОграничение Where

Проекция Select, SelectMany

Упорядочивание OrderBy, ThenBy

Группировка GroupBy

Joins Join, GroupJoin

Квантификация Any, All

Разбиение Take, Skip, TakeWhile, SkipWhile

Множественные Distinct, Union, Intersect, Except

Выбор элементов First, Last, Single, ElementAt

Агрегирование Count, Sum, Min, Max, Average

Преобразование ToArray, ToList, ToDictionary

Приведение типов OfType<T>, Cast<T>

Page 44: Net 3.0 & Linq

44

• Встроенный в язык доступ к данным– Проецирование таблиц и записей в классы и

объекты– Построен на ADO.NET и .NET транзакциях

• Отображение - Mapping– Декларативное (Encoded in attributes)– Авто-генерация или генерация вручную– ОR-М (Relationships map to properties)

• Сохранение Состояния (Persistence)– Автоматическое отслеживание изменений

Automatic change tracking– Модификации через SQL или хранимые

процедуры

DLInQ для реляционных данных

Page 45: Net 3.0 & Linq

Доступ к реляционным данным

var result = from x in students select{ x.Name, AvgGrade = (int)

(from g in grades where g.STUD_ID == x.STUD_IDselect g).Average(g=>g.GRADE)

}

var db = new StudDbDataContext(connStr);

var students = db.GetTable<STUDENT>();

var grades = db.GetTable<GRADES>();

Page 46: Net 3.0 & Linq

Доступ к данным сегодня и завтраSqlConnection c = new SqlConnection(connStr);c.Open();SqlCommand cmd = new SqlCommand( @"SELECT s.Name, s.Group FROM Students s WHERE s.Speciality = @p0");cmd.Parameters.AddWithValue("@p0", “1“);DataReader dr = c.Execute(cmd);while (dr.Read()) { StudList.Add(new Student(dr.GetString(0), dr.GetInt(1)));}dr.Close();

var db = new StudDbDataContext(connStr);var students = db.GetTable<STUDENT>();var StudList = from s in students where s.Speciality=1 select new Student(s.Name, s.Group);

Page 47: Net 3.0 & Linq

47

XLInQ для данных в XML• LInQ для XML

– Мощь и эффективность XPath / XQuery,но используя языки C# or VB

– Использует лучшее из DOM– Ориентация на элементы, а не документы– Симметрия в API между элементами и

аттрибутами– Functional construction– Текстовые ноды – просто строки (strings)– Упрощенная поддержка пространств имен XML– Быстрее, потребляет меньше ресурсов

Page 48: Net 3.0 & Linq

Доступ к данным XML<?xml version="1.0" encoding="utf-8" ?><Students>

<Student Name="Petya" Age="20" Speciality="Math"> <Grades>

<Grade Subject="Math" Value="5" /> <Grade Subject="CS" Value="3" />

</Grades> </Student> <Student Name="Vasya" Age="16" Speciality="CS">

<Grades> <Grade Subject="Math" Value="4" /> <Grade Subject="CS" Value="4" />

</Grades> </Student>

</Students>

Page 49: Net 3.0 & Linq

Список всех студентов: сегодня

var xdoc = new XmlDocument();xdoc.Load("students.xml");foreach (XmlElement x in

xdoc.SelectNodes("//Students/Student")){

int s=0, n=0;foreach (XmlElement y in

x.SelectNodes("Grades/Grade")){

n++; s += int.Parse(y.Attributes["Value"].Value);

}Console.WriteLine("{0} -> {1}", x.Attributes["Name"].Value, s/n);

}

Page 50: Net 3.0 & Linq

С использованием XLinq

var db = XElement.Load("students.xml");var st = from x in db.Descendants("Student")

select new { Name = (string)x.Attribute("Name"),Avg = (from y in x.Descendants("Grade")

select int.Parse((string)y.Attribute("Value")) ).Average()

};

Page 51: Net 3.0 & Linq

Генерация XML сегодняXmlDocument doc = new XmlDocument();XmlElement students = doc.CreateElement(“students");foreach (Student s in studentsList) { XmlElement e = doc.CreateElement(“student"); XmlElement name = doc.CreateElement("name"); name.InnerText = s.Name; e.AppendChild(name); XmlElement group = doc.CreateElement(“group"); group.InnerText = s.Group; e.AppendChild(group); students.AppendChild(e); }doc.AppendChild(students);

<students> <student> <name>Petya</name> <group>806</group> </student> …</students>

<students> <student> <name>Petya</name> <group>806</group> </student> …</students>

Императивная модель

Императивная модель

Ориентация на документ

Ориентация на документ

Нет встроенных запросов

Нет встроенных запросов

Требования к памяти

Требования к памяти

Page 52: Net 3.0 & Linq

Генерация XML в XLinqvar studs = new List<Student> {

new Student{Name="Vasya", Age=10, Speciality="CS"},new Student{Name="Petya", Age=16, Speciality="Math"}};

var XDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),new XComment("Student List"),new XElement("Students",

from x in studsselectnew XElement("Student",

new XAttribute("Name", x.Name),new XAttribute("Age", x.Age))));

Console.WriteLine(Xdoc);

<!--Student List--><Students> <Student Name="Vasya" Age="10" /> <Student Name="Petya" Age="16" /></Students>

Page 53: Net 3.0 & Linq

XML-трансформация

<html> <body>

<h1>Student List</h1> <ul>

<li>Petya</li> <li>Vasya</li>

</ul> </body>

</html>

<Students> <Student Name="Petya" Age="20“ /> <Student Name="Vasya" Age="16“ />

</Students>

Page 54: Net 3.0 & Linq

54

Проект LINQ• Встроенный язык запросов для .NET

– Язык запросов внутри C# 3.0 и VB 9.0

• Стандартные операторы запросов– SQL-подобные запросы для любых коллекций

в .NET

• DLinq– Среда для работы с реляционными данными

при помощи запросов

• XLinq– Быстрый,мощный XML DOM с встроенным

языком запросов

Page 55: Net 3.0 & Linq

Где?

• The LINQ Projecthttp://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

Page 56: Net 3.0 & Linq

• Cgfcb,j!

Page 57: Net 3.0 & Linq

• Спасибо!

Page 58: Net 3.0 & Linq

.NET 3.0 и LINQ

Константин Кичинский[email protected]://zelo-stroi.livejournal.com