Upload
juri-mulenko
View
3.778
Download
2
Embed Size (px)
DESCRIPTION
www.devclub.eu
Citation preview
Power of LINQЮрий Муленко
Betgenius
LINQ
Language Integrated Query
Механизм и синтаксис «языка» запросов, интегрированный в языки .NET платформы
Кто работает с данными ?
А что вы с ними делаете?
• Поиск = фильтрация• Превращения =
трансформация / композиция / декомпозиция• Сортировка• Анализ• Навигация = переход по
связям / traversing
А если нет разницы…
99.9% всех операций производимых над данными повторяются в каждом API или задаче *
* из личного опыта
Вы ещё кипятите?
• LINQ призван решить проблему эффективного взаимодействия языка программы и источника данных• impedance mismatch
User
Тогда мы идем к вам!
Бла-бла-бла• Erik Mejer• Haskell, Mondrian, X#,
Cω, C#, Visual Basic.• LINQ, Volta, Rx• Head of Cloud
Programmibility Team
• LINQ – 2007... ! (.NET 3.5)
• Out of the box – Linq2Objects, Linq2SQL, Linq2XML
LINQ
• Универсальный API для работы с данными
= Языковые конструкции
+ Набор операторов + синтаксический сахар
Вывод типа - VAR
Анонимные типы
Методы расширения
Методы расширения
Методы расширения
Лямбды
Лямбды
Функции как параметры
Угадайте функцию высшего порядка
на следующем слайде!
?
Map
• Взять последовательностьint[]
• Применить функцию к каждому элементу последовательности
foreach… int.ToString()• Вернуть набор результатов
return string[]
Map
Map
Map умного программиста
Map опытного программиста
LINQ 2 Objects
• Набор расширений поверх IEnumerable
• 50+ методов и их перегрузок (overloads) на все случаи жизни
Select (Map)
Where (Filter)
Сортировка
Аггрегация
Join
И все, все, все
Select SelectMany Min Max Sum Count Average Aggregate Cast ToList Join Reverse GroupBy Intersect Join Where First Last Any Except OrderBy Skip Take SkipWhile FirstOrDefault Single Union Zip Contains Distinct Empty Repeat
Альтернативный синтаксис
Сахарку ?
Поддерживаются «вложенные» запросы и операторы:select, where, orderby ascending/descending, group … by ... into ...join on … equals …let
Контрольный let в голову
LINQ2Anything
• А почему только коллекции?Нельзя ли все эти Where - ы и лямбды
u => u.Sex = ‘F’ выполнить на другом источнике данных?
• LINQ2Objects = IEnumerable extensions+ Func ’ s
• LINQ2Anything = IQueryable extensions + Expressions
Те же методы
Select SelectMany Min Max Sum Count Average Aggregate Cast ToList Join Reverse GroupBy Intersect Join Where First Last Any Except OrderBy Skip Take SkipWhile FirstOrDefault Single Union Zip Contains Distinct Empty Repeat
LINQ2Anything
• LINQ2Anything = IQueryable extenstions +
Expressions
• Expressions = код как данные. Абстрактное синтаксическое дерево
• Задача IQueryable + IQueryProvider – проанализировать дерево выражений и преобразовать его в вызовы API
Func – код
Expression – код как данные
Expression / Func
Разложение Expression Tree
LINQ Providers
• LINQ 2 Amazonhttp://weblogs.asp.net/fmarguerie/archive/2006/06/26/Introducing-Linq-to-Amazon.aspx
LINQ Providers
• LINQ 2 Flickr – „Athena“http://linqflickr.codeplex.com/
LINQ Providers
• LINQ 2 Twitterhttp://linqtotwitter.codeplex.com/
Java
• Google Collections / Guavahttp://code.google.com/p/guava-libraries/
Ресурсы• LINQ @ MSDNhttp://msdn.microsoft.com/en-us/library/bb397926.aspx
• 101 LINQ Sampleshttp://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
• Google/Bing/Blogs
Спасибо