.NET 3.0  и  LINQ Константин Кичинский [email_address] http://zelo-stroi.livejournal.com
.NET 3.0  и   LINQ обзор
.NET 3.0  и   LINQ обзор обзор
.NET 3.0  и   LINQ обзор обзор . NET 3.5
.NET
.NET
.NET
.NET
.NET
.NET
.NET
.NET
Windows  Presentation  Foundation
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
Эффективность работы пользователей
User Experience  в ПО, как выйти на новый уровень ? Преимущества для пользователя Интерактивность Оптимизация под форм фак...
Эволюция программного обеспечения <ul><li>GDI / GDI+ </li></ul><ul><li>Радует нас уже второе десятилетие </li></ul><ul><li...
Проблемы разработки интерфейса <ul><li>Разработчики и дизайнеры </li></ul><ul><li>Функционал и красота </li></ul><ul><li>U...
Windows Presentation Foundation <ul><li>Универсальность подхода к работе с пользовательским интерфейсом, документами и мед...
Взаимодействие дизайнера и разработчика Создает дизайн Добавляет бизнес логику Дизайнер Разработчик
Взаимодействие дизайнера и разработчика Дизайнер Разработчик
Взаимодействие дизайнера и разработчика Дизайнер Разработчик
Взаимодействие дизайнера и разработчика <ul><ul><li>С помощью  XAML  дизайнеры   и разработчики могут выйти на новый урове...
Взаимодействие дизайнера и разработчика <ul><li>Инструментарий  Microsoft  для дизайнеров и разработчиков </li></ul><ul><l...
Представление интерфейса с помощью  XAML <ul><li>XAML = Extensive Application Markup Language </li></ul><ul><li>Легко инст...
Property Engine Input / Eventing System .NET Framework 2.0 Desktop Windows Manager Media Integration Layer DirectX Windows...
Архитектура  WPF Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property ...
Что дает  WPF <ul><li>DirectX (Direct 3D vector) rendering </li></ul><ul><li>Layouts </li></ul><ul><li>Библиотека элементо...
Где найти? <ul><li>http://netfx3.com </li></ul><ul><li>http://windowsclient.net/ </li></ul><ul><li>Expression Studio </li>...
WCF  & WWF &CardSpace .NET 3.0  Part 2 Следующая пятница!
.NET 3.0  и   LINQ обзор обзор
Эволюция  C# C# 1.0 C# 2.0 C# 3.0 Управляемый код  ( сборка мусора,  reflection, …) Generics  (родовое программирование, с...
Что же нового в  C# 3.0 ?
LINQ
Language Integrated Query LINQ  to  Entities LINQ  To SQL LINQ to XML C#  VB.Net Others… LINQ  To Dataset LINQ  To Objects...
Query Expressions var  L =  new  List <Person>  {  new  Person{ Name= &quot;Vasya&quot; , Age= 16 , Speciality= 1  },  new...
Query Expressions  — синтаксис from   id   in   source {  from   id   in   source | join   id   in   source   on   expr   ...
Операции Ограничение Where Проекция Select, SelectMany Упорядочивание OrderBy, ThenBy Группировка GroupBy Joins Join, Grou...
<ul><li>Встроенный в язык доступ к данным </li></ul><ul><ul><li>Проецирование таблиц и записей в классы и объекты </li></u...
Доступ к реляционным данным var  result =  from  x  in  students  select {    x.Name,   AvgGrade = (int) ( from  g  in  gr...
Доступ к данным сегодня и завтра SqlConnection c =  new  SqlConnection(connStr); c.Open(); SqlCommand cmd =  new  SqlComma...
XLInQ  для   данных в  XML <ul><li>LInQ  для  XML </li></ul><ul><ul><li>Мощь и эффективность  XPath / XQuery , </li></ul><...
Доступ к данным XML <ul><li><? xml  version= &quot;1.0&quot;  encoding= &quot;utf-8&quot;  ?> </li></ul><ul><li>< Students...
Список всех студентов: сегодня var  xdoc =  new   XmlDocument (); xdoc.Load( &quot;students.xml&quot; ); foreach  ( XmlEle...
С использованием XLinq <ul><li>var  db =  XElement .Load( &quot;students.xml&quot; ); </li></ul><ul><li>var  st =  from  x...
Генерация XML сегодня XmlDocument  doc =  new   XmlDocument (); XmlElement  students = doc.CreateElement( “students&quot; ...
Генерация XML в XLinq var  studs =  new  List <Student>  {  new   Student {Name= &quot;Vasya&quot; , Age= 10 , Speciality=...
XML-трансформация <ul><li>< html > </li></ul><ul><ul><li>< body > </li></ul></ul><ul><ul><ul><li>< h1 >Student List</ h1 >...
Проект  LINQ <ul><li>Встроенный язык запросов для  .NET </li></ul><ul><ul><li>Язык запросов внутри  C# 3.0  и  VB 9.0 </li...
Где? <ul><li>The LINQ Project </li></ul><ul><li>http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx </li></ul>
<ul><li>Cgfcb,j! </li></ul>
<ul><li>Спасибо! </li></ul>
.NET 3.0  и  LINQ Константин Кичинский [email_address] http://zelo-stroi.livejournal.com
Upcoming SlideShare
Loading in …5
×

Net 3.0 & Linq

2,729 views
2,676 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,729
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
117
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Net 3.0 & Linq

    1. 1. .NET 3.0 и LINQ Константин Кичинский [email_address] http://zelo-stroi.livejournal.com
    2. 2. .NET 3.0 и LINQ обзор
    3. 3. .NET 3.0 и LINQ обзор обзор
    4. 4. .NET 3.0 и LINQ обзор обзор . NET 3.5
    5. 5. .NET
    6. 6. .NET
    7. 7. .NET
    8. 8. .NET
    9. 9. .NET
    10. 10. .NET
    11. 11. .NET
    12. 12. .NET
    13. 13. Windows Presentation Foundation
    14. 14. Эффективность работы пользователей
    15. 15. Эффективность работы пользователей
    16. 16. Эффективность работы пользователей
    17. 17. Эффективность работы пользователей
    18. 18. Эффективность работы пользователей
    19. 19. Эффективность работы пользователей
    20. 20. Эффективность работы пользователей
    21. 21. User Experience в ПО, как выйти на новый уровень ? Преимущества для пользователя Интерактивность Оптимизация под форм факторы Читабельность Производительность – GPU Красота - эмоциональность Преимущества для разработчика Простота разработки Универсальность работы с графикой & Media Богатство возможностей платформы Инструментарий Windows Vista Office 2007 Эффект UX Мотивация Продуктивность Удовлетворенность Положительные эмоции Повторное использование
    22. 22. Эволюция программного обеспечения <ul><li>GDI / GDI+ </li></ul><ul><li>Радует нас уже второе десятилетие </li></ul><ul><li>Гибкость даётся большими усилиями </li></ul><ul><li>Сложно реализовывать динамический интерфейс </li></ul><ul><li>Полноценно не использует возможности GPU </li></ul>Windows 1.0 Windows 3.0 Windows 95 Windows XP
    23. 23. Проблемы разработки интерфейса <ul><li>Разработчики и дизайнеры </li></ul><ul><li>Функционал и красота </li></ul><ul><li>UX не считается важным требованием </li></ul><ul><li>Корпоративные приложения (фокус – функционал) </li></ul><ul><li>Сложность разработки!!! </li></ul>
    24. 24. Windows Presentation Foundation <ul><li>Универсальность подхода к работе с пользовательским интерфейсом, документами и медиа-источниками </li></ul><ul><li>Интегрирования , векторная подсистема отрисовки </li></ul><ul><ul><li>Использование ресурсов GPU </li></ul></ul><ul><li>Декларативная разработка </li></ul><ul><ul><li>Вовлечение дизайнеров в разработку реальных интерфейсов </li></ul></ul><ul><li>Легкость разворачивания </li></ul><ul><ul><li>Возможность администраторам легко и безопасно разворачивать и управлять приложениями </li></ul></ul>
    25. 25. Взаимодействие дизайнера и разработчика Создает дизайн Добавляет бизнес логику Дизайнер Разработчик
    26. 26. Взаимодействие дизайнера и разработчика Дизайнер Разработчик
    27. 27. Взаимодействие дизайнера и разработчика Дизайнер Разработчик
    28. 28. Взаимодействие дизайнера и разработчика <ul><ul><li>С помощью XAML дизайнеры и разработчики могут выйти на новый уровень взаимодействия </li></ul></ul>Дизайнер Разработчик
    29. 29. Взаимодействие дизайнера и разработчика <ul><li>Инструментарий Microsoft для дизайнеров и разработчиков </li></ul><ul><li>Декларативная разработка с помощью XAML </li></ul><ul><li>Инструменты других производителей (e.g. Aurora by Mobiform, ZAM 3D by Electric Rain) </li></ul>Дизайнер Разработчик
    30. 30. Представление интерфейса с помощью XAML <ul><li>XAML = Extensive Application Markup Language </li></ul><ul><li>Легко инструментируемый язык , декларативная разметка </li></ul><ul><li>Разделение кода и представления </li></ul><ul><li>Может функционировать в browser или как в скомпилированном виде независимое приложение </li></ul><Button Width=&quot;100&quot;> OK <Button.Background> LightBlue </Button.Background> </Button> XAML Button b1 = new Button(); b1.Content = &quot;OK&quot;; b1.Background = new SolidColorBrush(Colors.LightBlue); b1.Width = 100; C# Dim b1 As New Button b1.Content = &quot;OK&quot; b1.Background = New _ SolidColorBrush(Colors.LightBlue) b1.Width = 100 VB.NET
    31. 31. 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 Managed Unmanaged 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 Audio Imaging Text Video Effects Composition Engine MEDIA INTEGRATION LAYER Controls Layout Windows Presentation Foundation XPS Viewer
    32. 32. Архитектура WPF 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 Audio Imaging Text Video Effects Composition Engine MEDIA INTEGRATION LAYER Controls Layout
    33. 33. Что дает WPF <ul><li>DirectX (Direct 3D vector) rendering </li></ul><ul><li>Layouts </li></ul><ul><li>Библиотека элементов управления ( Controls library ) </li></ul><ul><ul><li>Events routing </li></ul></ul><ul><li>Animations </li></ul><ul><li>Styles </li></ul><ul><li>DataBinding </li></ul><ul><li>Visual Brush </li></ul><ul><li>Media </li></ul><ul><li>Text </li></ul><ul><li>Reading </li></ul><ul><li>3D </li></ul>
    34. 34. Где найти? <ul><li>http://netfx3.com </li></ul><ul><li>http://windowsclient.net/ </li></ul><ul><li>Expression Studio </li></ul><ul><li>http://microsoft.com/expression/ </li></ul><ul><li>Visual Studio 2008 “Orcas” </li></ul><ul><li>http://msdn2.microsoft.com/en-us/evalcenter/bb655864.aspx </li></ul>
    35. 35. WCF & WWF &CardSpace .NET 3.0 Part 2 Следующая пятница!
    36. 36. .NET 3.0 и LINQ обзор обзор
    37. 37. Эволюция C# C# 1.0 C# 2.0 C# 3.0 Управляемый код ( сборка мусора, reflection, …) Generics (родовое программирование, статическая параметризация типов) Декларативное программирование Language Integrated Query
    38. 38. Что же нового в C# 3.0 ?
    39. 39. LINQ
    40. 40. Language Integrated Query LINQ to Entities LINQ To SQL LINQ to XML C# VB.Net Others… LINQ To Dataset LINQ To Objects LINQ-enabled ADO.NET
    41. 41. Query Expressions var L = new List <Person> { new Person{ Name= &quot;Vasya&quot; , Age= 16 , Speciality= 1 }, new Person{ Name= &quot;Petya&quot; , Age= 20 , Speciality= 2 }, new Person{ Name= &quot;Kolya&quot; , Age= 20 , Speciality= 1 } }; var Spec = new List <Speciality> { new Speciality{Code= 1 , Title= &quot;Math&quot; }, new Speciality{Code= 2 , Title= &quot;CS&quot; } }; 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 };
    42. 42. 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 0 или более from , join , let , where или orderby Заканчивается select или group by into позволяет продолжить запрос
    43. 43. Операции Ограничение 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>
    44. 44. <ul><li>Встроенный в язык доступ к данным </li></ul><ul><ul><li>Проецирование таблиц и записей в классы и объекты </li></ul></ul><ul><ul><li>Построен на ADO.NET и .NET транзакциях </li></ul></ul><ul><li>Отображение - Mapping </li></ul><ul><ul><li>Декларативное ( Encoded in attributes ) </li></ul></ul><ul><ul><li>Авто-генерация или генерация вручную </li></ul></ul><ul><ul><li>О R- М ( Relationships map to properties ) </li></ul></ul><ul><li>Сохранение Состояния ( Persistence ) </li></ul><ul><ul><li>Автоматическое отслеживание изменений Automatic change tracking </li></ul></ul><ul><ul><li>Модификации через SQL или хранимые процедуры </li></ul></ul>DLInQ для реляционных данных
    45. 45. Доступ к реляционным данным var result = from x in students select { x.Name, AvgGrade = (int) ( from g in grades where g.STUD_ID == x.STUD_ID select g).Average(g=>g.GRADE) } var db = new StudDbDataContext(connStr); var students = db.GetTable <STUDENT> (); var grades = db.GetTable <GRADES> ();
    46. 46. Доступ к данным сегодня и завтра SqlConnection c = new SqlConnection(connStr); c.Open(); SqlCommand cmd = new SqlCommand( @ &quot;SELECT s.Name, s.Group FROM Students s WHERE s.Speciality = @p0&quot; ); cmd.Parameters.AddWithValue( &quot;@p0&quot; , “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);
    47. 47. XLInQ для данных в XML <ul><li>LInQ для XML </li></ul><ul><ul><li>Мощь и эффективность XPath / XQuery , </li></ul></ul><ul><ul><li>но используя языки C# or VB </li></ul></ul><ul><ul><li>Использует лучшее из DOM </li></ul></ul><ul><ul><li>Ориентация на элементы, а не документы </li></ul></ul><ul><ul><li>Симметрия в API между элементами и аттрибутами </li></ul></ul><ul><ul><li>Functional construction </li></ul></ul><ul><ul><li>Текстовые ноды – просто строки ( strings ) </li></ul></ul><ul><ul><li>Упрощенная поддержка пространств имен XML </li></ul></ul><ul><ul><li>Быстрее, потребляет меньше ресурсов </li></ul></ul>
    48. 48. Доступ к данным XML <ul><li><? xml version= &quot;1.0&quot; encoding= &quot;utf-8&quot; ?> </li></ul><ul><li>< Students > </li></ul><ul><ul><li>< Student Name= &quot;Petya&quot; Age= &quot;20&quot; Speciality= &quot;Math&quot; > </li></ul></ul><ul><ul><ul><li>< Grades > </li></ul></ul></ul><ul><ul><ul><ul><li>< Grade Subject= &quot;Math&quot; Value= &quot;5&quot; /> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>< Grade Subject= &quot;CS&quot; Value= &quot;3&quot; /> </li></ul></ul></ul></ul><ul><ul><ul><li></ Grades > </li></ul></ul></ul><ul><ul><li></ Student > </li></ul></ul><ul><ul><li>< Student Name= &quot;Vasya&quot; Age= &quot;16&quot; Speciality= &quot;CS&quot; > </li></ul></ul><ul><ul><ul><li>< Grades > </li></ul></ul></ul><ul><ul><ul><ul><li>< Grade Subject= &quot;Math&quot; Value= &quot;4&quot; /> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>< Grade Subject= &quot;CS&quot; Value= &quot;4&quot; /> </li></ul></ul></ul></ul><ul><ul><ul><li></ Grades > </li></ul></ul></ul><ul><ul><li></ Student > </li></ul></ul><ul><li></ Students > </li></ul>
    49. 49. Список всех студентов: сегодня var xdoc = new XmlDocument (); xdoc.Load( &quot;students.xml&quot; ); foreach ( XmlElement x in xdoc.SelectNodes( &quot;//Students/Student&quot; )) { int s=0, n=0; foreach ( XmlElement y in x.SelectNodes( &quot;Grades/Grade&quot; )) { n++; s += int.Parse(y.Attributes[ &quot;Value&quot; ].Value); } Console .WriteLine( &quot;{0} -> {1}&quot; , x.Attributes[ &quot;Name&quot; ].Value, s/n); }
    50. 50. С использованием XLinq <ul><li>var db = XElement .Load( &quot;students.xml&quot; ); </li></ul><ul><li>var st = from x in db.Descendants( &quot;Student&quot; ) </li></ul><ul><li>select new { </li></ul><ul><li>Name = ( string )x.Attribute( &quot;Name&quot; ), </li></ul><ul><li>Avg = ( from y in x.Descendants( &quot;Grade&quot; ) </li></ul><ul><ul><ul><li> select int.Parse(( string )y.Attribute( &quot;Value&quot; )) </li></ul></ul></ul><ul><ul><ul><li> ).Average() </li></ul></ul></ul><ul><li>}; </li></ul>
    51. 51. Генерация XML сегодня XmlDocument doc = new XmlDocument (); XmlElement students = doc.CreateElement( “students&quot; ); foreach ( Student s in studentsList) { XmlElement e = doc.CreateElement( “student&quot; ); XmlElement name = doc.CreateElement( &quot;name&quot; ); name.InnerText = s.Name; e.AppendChild(name); XmlElement group = doc.CreateElement( “group&quot; ); group.InnerText = s.Group; e.AppendChild(group); students.AppendChild(e); } doc.AppendChild(students); <students> <student> <name>Petya</name> <group> 806 </group> </student> … </students> Императивная модель Ориентация на документ Нет встроенных запросов Требования к памяти
    52. 52. Генерация XML в XLinq var studs = new List <Student> { new Student {Name= &quot;Vasya&quot; , Age= 10 , Speciality= &quot;CS&quot; }, new Student {Name= &quot;Petya&quot; , Age= 1 6, Speciality= &quot;Math&quot; }}; var XDoc = new XDocument ( new XDeclaration ( &quot;1.0&quot; , &quot;utf-8&quot; , &quot;yes&quot; ), new XComment ( &quot;Student List&quot; ), new XElement ( &quot;Students&quot; , from x in studs select new XElement ( &quot;Student&quot; , new XAttribute ( &quot;Name&quot; , x.Name), new XAttribute ( &quot;Age&quot; , x.Age)))); Console .WriteLine(Xdoc); <!--Student List--> < Students > < Student Name= &quot;Vasya&quot; Age= &quot;10&quot; /> < Student Name= &quot;Petya&quot; Age= &quot;16&quot; /> </ Students >
    53. 53. XML-трансформация <ul><li>< html > </li></ul><ul><ul><li>< body > </li></ul></ul><ul><ul><ul><li>< h1 >Student List</ h1 > </li></ul></ul></ul><ul><ul><ul><li>< ul > </li></ul></ul></ul><ul><ul><ul><ul><li>< li >Petya</ li > </li></ul></ul></ul></ul><ul><ul><ul><ul><li>< li >Vasya</ li > </li></ul></ul></ul></ul><ul><ul><ul><li></ ul > </li></ul></ul></ul><ul><ul><li></ body > </li></ul></ul><ul><li></ html > </li></ul><ul><li>< Students > </li></ul><ul><ul><li>< Student Name= &quot;Petya&quot; Age= &quot;20“ /> </li></ul></ul><ul><ul><li>< Student Name= &quot;Vasya&quot; Age= &quot;16“ /> </li></ul></ul><ul><li></ Students > </li></ul>
    54. 54. Проект LINQ <ul><li>Встроенный язык запросов для .NET </li></ul><ul><ul><li>Язык запросов внутри C# 3.0 и VB 9.0 </li></ul></ul><ul><li>Стандартные операторы запросов </li></ul><ul><ul><li>SQL- подобные запросы для любых коллекций в .NET </li></ul></ul><ul><li>DLinq </li></ul><ul><ul><li>Среда для работы с реляционными данными при помощи запросов </li></ul></ul><ul><li>XLinq </li></ul><ul><ul><li>Быстрый , мощный XML DOM с встроенным языком запросов </li></ul></ul>
    55. 55. Где? <ul><li>The LINQ Project </li></ul><ul><li>http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx </li></ul>
    56. 56. <ul><li>Cgfcb,j! </li></ul>
    57. 57. <ul><li>Спасибо! </li></ul>
    58. 58. .NET 3.0 и LINQ Константин Кичинский [email_address] http://zelo-stroi.livejournal.com

    ×