51
Power of LINQ Юрий Муленко Betgenius

Power of LINQ

Embed Size (px)

DESCRIPTION

www.devclub.eu

Citation preview

Page 1: Power of LINQ

Power of LINQЮрий Муленко

Betgenius

Page 2: Power of LINQ

LINQ

Language Integrated Query

Механизм и синтаксис «языка» запросов, интегрированный в языки .NET платформы

Page 3: Power of LINQ

Кто работает с данными ?

Page 4: Power of LINQ

А что вы с ними делаете?

• Поиск = фильтрация• Превращения =

трансформация / композиция / декомпозиция• Сортировка• Анализ• Навигация = переход по

связям / traversing

Page 5: Power of LINQ

А если нет разницы…

99.9% всех операций производимых над данными повторяются в каждом API или задаче *

* из личного опыта

Page 6: Power of LINQ

Вы ещё кипятите?

• LINQ призван решить проблему эффективного взаимодействия языка программы и источника данных•  impedance mismatch

Page 7: Power of LINQ

User

Page 8: Power of LINQ

Тогда мы идем к вам!

Page 9: Power of LINQ

Бла-бла-бла• 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

Page 10: Power of LINQ

LINQ

• Универсальный API для работы с данными

= Языковые конструкции

+ Набор операторов + синтаксический сахар

Page 11: Power of LINQ

Вывод типа - VAR

Page 12: Power of LINQ

Анонимные типы

Page 13: Power of LINQ

Методы расширения

Page 14: Power of LINQ

Методы расширения

Page 15: Power of LINQ

Методы расширения

Page 16: Power of LINQ

Лямбды

Page 17: Power of LINQ

Лямбды

Page 18: Power of LINQ

Функции как параметры

Page 19: Power of LINQ

Угадайте функцию высшего порядка

на следующем слайде!

?

Page 20: Power of LINQ

Map

• Взять последовательностьint[]

• Применить функцию к каждому элементу последовательности

foreach… int.ToString()• Вернуть набор результатов

return string[]

Page 21: Power of LINQ

Map

Page 22: Power of LINQ

Map

Page 23: Power of LINQ

Map умного программиста

Page 24: Power of LINQ

Map опытного программиста

Page 25: Power of LINQ

LINQ 2 Objects

• Набор расширений поверх IEnumerable

• 50+ методов и их перегрузок (overloads) на все случаи жизни

Page 26: Power of LINQ

Select (Map)

Page 27: Power of LINQ

Where (Filter)

Page 28: Power of LINQ

Сортировка

Page 29: Power of LINQ

Аггрегация

Page 30: Power of LINQ

Join

Page 31: Power of LINQ

И все, все, все

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

Page 32: Power of LINQ

Альтернативный синтаксис

Page 33: Power of LINQ

Сахарку ?

Поддерживаются «вложенные» запросы и операторы:select, where, orderby ascending/descending, group … by ... into ...join on … equals …let

Page 34: Power of LINQ

Контрольный let в голову

Page 35: Power of LINQ

LINQ2Anything

• А почему только коллекции?Нельзя ли все эти Where - ы и лямбды

u => u.Sex = ‘F’ выполнить на другом источнике данных?

• LINQ2Objects = IEnumerable extensions+ Func ’ s

• LINQ2Anything = IQueryable extensions + Expressions

Page 36: Power of LINQ

Те же методы

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

Page 37: Power of LINQ

LINQ2Anything

• LINQ2Anything = IQueryable extenstions +

Expressions

• Expressions = код как данные. Абстрактное синтаксическое дерево

• Задача IQueryable + IQueryProvider – проанализировать дерево выражений и преобразовать его в вызовы API

Page 38: Power of LINQ

Func – код

Page 39: Power of LINQ

Expression – код как данные

Page 40: Power of LINQ

Expression / Func

Page 41: Power of LINQ

Разложение Expression Tree

Page 43: Power of LINQ

LINQ Providers

• LINQ 2 Active Directoryhttp://linqtoad.codeplex.com/

Page 44: Power of LINQ

LINQ Providers

• LINQ 2 Flickr – „Athena“http://linqflickr.codeplex.com/

Page 45: Power of LINQ

LINQ Providers

• LINQ 2 Twitterhttp://linqtotwitter.codeplex.com/

Page 46: Power of LINQ

Java

• Google Collections / Guavahttp://code.google.com/p/guava-libraries/

Page 47: Power of LINQ

Java

• Quaerehttp://quaere.codehaus.org/

Page 48: Power of LINQ

PHP

• PHPLinqhttp://phplinq.codeplex.com

Page 49: Power of LINQ

Javascript

• jLinqhttp://hugoware.net/Projects/jLinq

Page 51: Power of LINQ

Спасибо

[email protected]