Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Синтаксис запиту або синтаксис методу
У попередніх прикладах більшість запитів написані як вирази запитів за допомогою декларативного синтаксису запиту, представленого в C# 3.0. Проте в самому загальномовному середовищі виконання (CLR).NET відсутнє поняття синтаксису запиту. Таким чином, під час компіляції вирази запиту перетворяться в те, що зрозуміло CLR – виклики методів. Ці методи називаються стандартними операторами запитів, і вони мають такі імена, як Where, Select, GroupBy, Join, Мах, Average і так далі Їх можна викликати безпосередньо, використовуючи синтаксис методів замість синтаксису запитів. В цілому, рекомендується синтаксис запитів, оскільки зазвичай він простіший і легко читається; проте між синтаксисом методів і синтаксисом запитів немає семантичної різниці. Крім того, деякі запити, наприклад такі, які вибирають кількість елементів, відповідних вказаній умові, або які вибирають елемент, що має максимальне значення у вихідній послідовності, можуть бути виражені лише у вигляді викликів методів. У довідковій документації по стандартних операторах запитів в просторі імен System.Linq зазвичай використовується синтаксис методів. Тому, навіть на початковому етапі написання запитів LINQ корисно знати, як використовувати синтаксис методів в запитах і самих виразах запиту. Методи розширення стандартних операторів запитів У наступному прикладі показано просте вираження запиту і семантично еквівалентний йому запит, написаний як запит на основі методу: class QueryVMethodSyntax{ static void Main() { int[] numbers = { 5, 10, 8, 3, 6, 12 }; //Синтаксис запиту: IEnumerable<int> numQuery1 = from num in numbers where num % 2 == 0 orderby num select num; //Синтаксис методу: IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n); foreach (int i in numQuery1) { Console.Write(i + " "); } Console.WriteLine(System.Environment.NewLine); foreach (int i in numQuery2) { Console.Write(i + " "); } Console.WriteLine(System.Environment.NewLine); Console.WriteLine("Натискуйте будь-яку кнопку для виходу!"); Console.ReadKey(); }}/* На виході буде отримано: 6 8 10 12 6 8 10 12 */ Два приклади мають ідентичні результати. Тип змінної запиту однаковий в обох формах: IEnumerable<(Of <(T>)>). Аби зрозуміти запит на основі методу, розглянемо його детальніше. Звернете увагу, що в правій частині виразу пропозиція where тепер виражена у вигляді методу екземпляра об'єкту numbers, який має тип IEnumerable<int>. Якщо ви знайомі з універсальним інтерфейсом IEnumerable<(Of <(T>)>), вам відомо, що він не має методу Where. Проте при виклику списку завершення IntelliSense в IDE Visual Studio відображуватиме не лише метод Where, але і багато інших методів, такі як Select, SelectMany, Join і Orderby. Вони всі є стандартними операторами запитів.
Лямбда-вирази У попередньому прикладі умовний вираз (num % 2 == 0) передається як вбудований аргумент методу Where: Where(num => num % 2 == 0). Цей вбудований вираз називається лямбда-виразом. Він є зручним способом написання коду, який інакше довелося б записувати в громіздкішій формі як анонімний метод, універсальний делегат або дерево виразів. У C# => є лямбда-оператором, який читається як "переходить". num зліва від оператора є вхідній змінній, яка відповідає num у виразі запиту. Компілятор може визначити тип num, оскільки йому відомо, що numbers є універсальним типом IEnumerable<(Of <(T>)>). Основна частина лямбда-виразу представляє те саме, що і вираз в синтаксисі запиту або в будь-якому іншому виразі або операторі C#; він може включати виклики методів і іншу складну логіку. Значенням, що повертається є просто результат виразу. Приступаючи до роботи з LINQ, немає необхідності широко використовувати лямбда-вирази. Проте деякі запити можуть виражатися лише в синтаксисі методів, а деякі з них вимагають лямбда-виразів.
|
|||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 206; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.229.161 (0.004 с.) |