Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемГеоргий Шольцев
1 61) new { имя_А = значение_А, имя_В = значение_В,... } new { Count = 10, Max = 100, Min = 0 } 62) var myOb = new { Count = 10, Max = 100, Min = 0 } 63) Console.WriteLine("Счет равен " + myOb.Count); if(i = myOb.Min) //... 64) Листинг 9.16 // Использовать анонимный тип для усовершенствования // программы, демонстрирующей применение оператора join. using System; using System.Linq;
2 // Класс, связывающий наименование товара с его порядковым номером. class Item { public string Name { get; set; } public int ItemNumber { get; set; } public Item(string n, int inum) { Name = n; ItemNumber = inum; } // Класс, связывающий наименование товара с состоянием // его запасов на складе. class InStockStatus { public int ItemNumber { get; set; } public bool InStock { get; set; }
3 public InStockStatus(int n, bool b) { ItemNumber = n; InStock = b; } class AnonTypeDemo { static void Main() { Item[] items = { new Item("Кусачки", 1424), new Item("Тиски", 7892), new Item("Молоток", 8534), new Item("Пила", 6411) }; InStockStatus[] statusList = { new InStockStatus(1424, true), new InStockStatus(7892, false), new InStockStatus(8534, true), new InStockStatus(6411, true) };
4 // Сформировать запрос, объединяющий объекты классов Item // и InStockStatus для составления списка наименований // товаров и их наличия на складе. Теперь для этой цели // используется анонимный тип. var inStockList = from item in items join entry in statusList on item.ItemNumber equals entry.ItemNumber select new { Name = item.Name, InStock = entry.InStock }; Console.WriteLine("Товар\t Наличие\n"); // Выполнить запрос и вывести его результаты. foreach(var t in inStockList) Console.WriteLine("{0}\t{1}", t.Name, t.InStock); }
5 65) select new { Name = item.Name, InStock = entry.InStock }; 66) select new { item.Name, entry.InStock }; 67) Листинг 9.17 // Продемонстрировать применение простого группового объединения. using System; using System.Linq; // Этот класс связывает наименование вида транспорта, // например, поезда, с общей классификацией транспорта: // наземного, морского, воздушного или речного. class Transport { public string Name { get; set; } public string How { get; set; }
6 public Transport(string n, string h) { Name = n; How = h; } class GroupJoinDemo { static void Main() { // Массив классификации видов транспорта. string[] travelTypes = { "Воздушный", "Морской", "Наземный", "Речной" };
7 // Массив видов транспорта. Transport[] transports = { new Transport("велосипед", "Наземный"), new Transport("аэростат", "Воздушный"), new Transport("лодка", "Речной"), new Transport("самолет", "Воздушный"), new Transport("каноэ", "Речной"), new Transport("биплан", "Воздушный"), new Transport("автомашина", "Наземный"), new Transport("судно", "Морской"), new Transport("поезд", "Наземный") }; // Сформировать запрос, в котором групповое // объединение используется для составления списка // видов транспорта по соответствующим категориям. var byHow = from how in travelTypes join trans in transports on how equals trans.How into lst select new { How = how, Tlist = lst };
8 // Выполнить запрос и вывести его результаты. foreach(var t in byHow) { Console.WriteLine("К категории " + "относится: ", t.How); foreach(var m in t.Tlist) Console.WriteLine(" " + m.Name); Console.WriteLine(); } 68) К категории относится: аэростат самолет биплан К категории относится: Судно
9 К категории относится: велосипед автомашина поезд К категории относится: лодка каноэ 69) var byHow = from how in travelTypes join trans in transports on how equals trans.How into lst select new { How = how, Tlist = lst };
10 70) foreach(var t in byHow) { Console.WriteLine("К категории относится:", t.How); foreach(var m in t.Tlist) Console.WriteLine(" " + m.Name); Console.WriteLine() ; } Оператор запроса Эквивалентный метод запроса selectSelect(selector) whereWhere(predicate) orderby OrderBy(keySelector) или OrderByDescending(keySelector) join Join(inner, outerKeySelector, innerKeySelector, resultKeySelector) groupGroupBy(keySelector)
11 72) delegate TResult Func (Т arg) 73) Листинг 9.18 // Использовать методы запроса для формирования простого запроса. Это переделанный вариант // первого примера программы из данной главы. using System; using System.Linq; class SimpQuery { static void Main() { int[] nums = { 1, -2, 3, 0, -4, 5 }; // Использовать методы Where() и Select() для // формирования простого запроса.
12 var posNums = nums.Where(n => n > 0).Select(r => r); Console.Write( "Положительные значения из массива nums: "); // Выполнить запрос и вывести его результаты. foreach(int i in posNums) Console.Write(i + " "); Console.WriteLine(); } 74) Положительные значения из массива nums: ) var posNums = nums.Where(n => n > 0).Select(r => r); 76) var posNums = nums.Where(n => n > 0).Select (r => r * 10); 77) var posNums = nums.Where (n => n > 0).OrderByDescending(j => j); n > 0).Select(r => r); 76) var posNums = nums.Where(n => n > 0).Select (r => r * 10); 77) var posNums = nums.Where (n => n > 0).OrderByDescending(j => j);">
13 78) Листинг 9.19 // Продемонстрировать применение метода GroupBy(). // Это переработанный вариант примера, приведенного // ранее для демонстрации синтаксиса запросов. using System; using System.Linq; class GroupByDemo { static void Main() { string[] websites = { "hsNameA.com", "hsNameB.net", "hsNameC.net", "hsNameD.com","hsNameE.org", "hsNameF.org", "hsNameG.tv", "hsNameH.net", "hsNameI.tv" };
14 // Использовать методы запроса для группирования // веб-сайтов по имени домена самого верхнего // уровня. var webAddrs = websites.Where(w => w.LastIndexOf('.') != 1). GroupBy(x => x.Substring(x.LastIndexOf('.'))); // Выполнить запрос и вывести его результаты. foreach(var sites in webAddrs) { Console.WriteLine("Веб-сайты, сгруппированные " + "по имени домена" + sites.Key); foreach(var site in sites) Console.WriteLine(" " + site); Console.WriteLine(); }
15 79) var inStockList = from item in items join entry in statusList on item.ItemNumber equals entry.ItemNumber select new Temp(item.Name, entry.InStock); 80) // Использовать метод запроса Join() для составления // списка наименований товаров и состояния // их запасов на складе. var inStockList = items.Join(statusList, k1 => kl.ItemNumber, k2 => k2.ItemNumber, (kl, k2) => new Temp(k1.Name, k2.InStock) );
16 81) var inStockList = items.Join(statusList, k1 => k1.ItemNumber, k2 => k2.ItemNumber, (kl, k2) => new { kl.Name, k2.InStock} ); 82) where х < 10 83) Where(х => х < 10)
17 Метод Описание All(predicate) Возвращает логическое значение true, если все элементы в последовательности удовлетворяют условию, задаваемому параметром predicate Any(predicate) Возвращает логическое значение true, если любой элемент в последовательности удовлетворяют условию, задаваемому параметром predicate Average() Возвращает среднее всех значений в числовой последовательности Contains(value) Возвращает логическое значение true, если в последовательности содержится указанный объект Count() Возвращает длину последовательности, т. е. количество составляющих ее элементов First() Возвращает первый элемент в последовательности Last() Возвращает последний элемент в последовательности Max() Возвращает максимальное значение в последовательности Min() Возвращает минимальное значение в последовательности Sum() Возвращает сумму значений в числовой последовательности
18 85) Листинг 9.20 // Использовать ряд методов расширения, определенных // в классе Enumerable. using System; using System.Linq; class ExtMethods { static void Main() { int[] nums = { 3, 1, 2, 5, 4 }; Console.WriteLine("Минимальное значение равно " + nums.Min()); Console.WriteLine("Максимальное значение равно + nums.Max()); Console.WriteLine("Первое значение равно " + nums.First());
19 86) Листинг 9.21 Минимальное значение равно 1 Максимальное значение равно 5 Первое значение равно 3 Последнее значение равно 4 Суммарное значение равно 15 Среднее значение равно 3 Все значения больше нуля. По крайней мере одно значение является четным Массив содержит значение 3. 87) // Использовать метод Average() вместе с синтаксисом // запросов. using System; using System.Linq; class ExtMethods2 { static void Main()
20 { int[] nums = { 1, 2, 4, 8, 6, 9, 10, 3, 6, 7 }; var ltAvg = from n in nums let x = nums.Average() where n < x select n; Console.WriteLine("Среднее значение равно " + nums.Average()); Console.Write("Значения меньше среднего: "); // Выполнить запрос и вывести его результаты. foreach(int i in ltAvg) Console.Write(i + " "); Console.WriteLine(); }
21 88) Среднее значение равно 5.6 Значения меньше среднего: ) var ltAvg = from n in nums let x = nums.Average() where n < x select n; 90) Листинг 9.22 // Использовать режим немедленного выполнения запроса. using System; using System.Linq; class ImmediateExec { static void Main() { int[] nums = { 1, -2, 3, 0, -4, 5 };
22 // Сформировать запрос на получение количества // положительных значений в массиве nums. int len = (from n in nums where n > 0 select n).Count(); Console.WriteLine( "Количество положительных значений в массиве nums: " + len); } 91) Количество положительных значений в массиве nums: 3 92) var posNums = from n in nums where n > 0 select n; int len = posNums.Count(); // запрос выполняется здесь 0 select n; int len = posNums.Count(); // запрос выполняется здесь">
23 93) int[] pnums = posNum.ToArray(); // запрос выполняется здесь foreach(int i in pnums) { Console.Write(i + " "); } 94) Листинг // Пример простого дерева выражений. using System; using System.Linq; using System.Linq.Expressions; class SimpleExpTree { static void Main() {
24 // Представить лямбда-выражение в виде данных. Expression > IsFactorExp = (n, d) => (d != 0) ? (n % d) == 0 : false; // Скомпилировать данные выражения в исполняемый код. Func IsFactor = IsFactorExp.Compile(); // Выполнить выражение. if(IsFactor(10, 5)) Console.WriteLine("Число 5 является множителем 10."); if(!IsFactor(10, 7)) Console.WriteLine( "Число 7 не является множителем 10."); Console.WriteLine(); }
25 95) Число 5 является множителем 10. Число 7 не является множителем ) Expression > IsFactorExp = (n, d) => (d != 0) ? (n % d) == 0 : false; 97) Func IsFactor = IsFactorExp.Compile(); 98) static возвращаемый_тип имя ( this тип_вызывающего_объекта ob, список_параметров)
26 99) Листинг 9.24 // Создать и использовать ряд методов расширения. using System; using System.Globalization; static class MyExtMeths { // Возвратить обратную величину числового // значения типа double. public static double Reciprocal(this double v) { return 1.0 / v; } // Изменить на обратный регистр букв в символьной // строке и возвратить результат.
27 public static string RevCase(this string str) { string temp = ""; foreach(char ch in str) { if(Char.IsLower(ch)) temp += Char.ToUpper(ch, CultureInfo.CurrentCulture); else temp += Char.ToLower(ch, CultureInfo.CurrentCulture); } return temp; } // Возвратить абсолютное значение выражения n / d. public static double AbsDivideBy(this double n, double d) { return Math.Abs(n / d); }
28 class ExtDemo { static void Main() { double val = 8.0; string str = "Alpha Beta Gamma"; // Вызвать метод равширения Reciprocal(). Console.WriteLine( "Обратная величина {0} равна {1}", val, val.Reciprocal()); // Вызвать метод расширения RevCase(). Console.WriteLine(str + " после сиены регистра + str.RevCase()); // Использовать метод расширения AbsDivideBy(); Console.WriteLine( "Результат вызова метода val.AbsDivideBy(-2): " + val.AbsDivideBy(-2)); }
29 100) Обратная величина 8 равна Alpha Beta Gamma после смены регистра: aLPHA bЕТА gАММА Результат вызова метода val.AbsDivideBy(-2): 4 101) val.AbsDivideBy(-2) 102) 8.0.Reciprocal() 8.0.AbsDivideBy(-1) 103) "AbCDe".RevCase()
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.