Power of LINQ

Preview:

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 Active Directoryhttp://linqtoad.codeplex.com/

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/

Java

• Quaerehttp://quaere.codehaus.org/

PHP

• PHPLinqhttp://phplinq.codeplex.com

Javascript

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

Спасибо

yuri.mulenko@gmail.com

Recommended