орки наступают БОРИС ВОЛЬФСОН Спецвыпуск: Хакер, номер #071, стр. 071-060-2 SELECT * FROM books WHERE price > 200 ORDER BY author На других языках нам бы пришлось описывать целый алгоритм пробега по массиву и отбора нужных книг, а в SQL - просто один запрос! Почему бы ни привнести в язык C# такую функциональность? Первыми такой подход (точнее, похожий подход) использовали авторы языка Cw (читается «Си-омега»), а затем он появился в C# в том виде, в котором мы можем видеть его сейчас. Для тех, кому интересен язык Си-омега, сообщаю, что его компилятор также бесплатен и общедоступен. [install.] Чтобы установить LINQ, нам понадобится Visual Studio 2005 и немного терпения. Скачать файл можно с сайта одной небезызвестной компании :). Русской версии, к сожалению, на сайте нет, поэтому при установке на русскоязычную Windows появится страшное окно, которое говорит, что нет пользователя или группы пользователей с данным именем – надо просто его создать в панели управления. На вопрос «апдейтить ли язык C# при установке» стоит ответить положительно, с бейсиком я не экспериментировал – так что желающие могут попробовать на свой страх и риск. Также рекомендую скачать «101 пример по LINQ» («100 LINQ Samples»). После установки очень советую изучить папку С:\Program Files\LINQ Preview, то есть папку, куда ты установил LINQ. В ней ты найдешь необходимую документацию, примеры программ и утилиты. Я постараюсь сосредоточиться именно на написании программ – использование утилит остается на откуп читателям. Начнем с самого простого - с контейнеров... [контейнеры.] Напишем культовую программу – «Hello, world». Идею, как написать ее на LINQ, я самым бесстыдным образом украл у одного программиста в его блоге :). string[] words = { "Hello", "Dog", "Cat", "Foo", "world" }; var result = from w in words where w.Length == 5 select w; foreach (var s in result) Console.Write(s + " "); Давай посмотрим, что делает этот код. Первая строчка абсолютно обычная – она просто создает массив из строк (контейнер), в котором мы будем вести поиск. Далее объявляется бестиповая переменная result, и ей присваивается результат запроса. Запрос похож на обычный SQL, только написанный задом наперед :). Это не баг – это фича! Такой порядок нужен, чтобы работал механизм IntelliSense для вывода автоматических подсказок. Теперь препарируем сам запрос. Ключевое слово from указывает, к какому именно контейнеру будет происходить запрос и объявляет переменную w, которая представляет собой отдельный элемент контейнера и будет использована в запросе. Дальше следует оператор where (ограничивающий оператор) – он отбирает только нужные элементы, то есть слова, длина которых равна пяти символам. И последний оператор select указывает, что именно должно попасть в результат запроса. Нижние строчки, как можно было догадаться, просто печатают результат :). Итак, жмем на педаль (она же F5) и получаем долгожданные «Hello world», потому что в массиве words только эти строчки имеют длину пять символов (мы указали ее в операторе where). |