1) Листинг 9.1 // Сформировать простой запрос LINQ. using System; using System.Linq; class SimpQuery { static void Main() { int[] nums = { 1, -2, 3, 0, -4, 5 }; // Сформировать простой запрос на получение только // положительных значений. var posNums = from n in nums where n > 0 select n; Console.Write( "Положительные значения из массива nums: "); // Выполнить запрос и отобразить его результаты. foreach(int i in posNums) Console.Write(i + " "); Console.WriteLine(); } } 2) var posNums = from n in nums where n > 0 select n; 3) from переменная_диапазона in источник_данных 4) where булево_выражение 5) where n > 0 6) foreach(int i in posNums) Console.WriteLine(i + " "); 7) Листинг 9.2 // Сформировать простой запрос. using System; using System.Linq; using System.Collections.Generic; class SimpQuery { static void Main() { int[] nums = { 1, -2, 3, 0, -4, 5 }; //Сформировать простой запрос на получение только //положительных значений. var posNums = from n in nums where n > 0 select n; Console.Write( "Положительные значения из массива nums: "); //Выполнить запрос и отобразить его результаты. foreach(int i in posNums) Console.Write(i + " "); Console.WriteLine(); // Change nums. Console.WriteLine("\n“); nums[1] = 99; Console.Write( "Положительные значения из массива nums\n" + "после изменений в нем: "); // Выполнить запрос второй раз. foreach(int i in posNums) Console.Write(i + " "); Console.WriteLine(); } } 8) Положительные значения из массива nums: 1 3 5 Задать значение 99 для элемента массива nums[l]. Положительные значения из массива nums после изменений в нем: 1 99 3 5 9) var posNums = from int n in nums // ... 10) IEnumerable<int> posNums = from n in nums where n > 0 select n; 11) ascending by descending equals from group in into join let on orderby select where 12) from orderby group select join where let 13) Листинг 9.3 // Использовать несколько операторов where. using System; using System.Linq; class TwoWheres { static void Main() { int[] nums = {1, -2, 3, -3, 0, -8, 12, 19, 6, 9, 10}; //Сформировать запрос на получение положительных //значений меньше 10. var posNums = from n in nums where n > 0 where n < 10 select n; Console.Write("Положительные значения меньше 10: "); // Выполнить запрос и вывести его результаты. foreach(int i in posNums) Console.Write (i + " "); Console.WriteLine(); } } 14) Положительные значения меньше 10: 1 3 6 9 15) where n > 0 where n < 10 16) var posNums = from n in nums where n > 0 && n < 10 select n; 17) Листинг 9.4 // Продемонстрировать применение еще одного оператора where. using System; using System.Linq; class WhereDemo2 { static void Main() { string[] strs = {".com",".net","hsNameA.com", "hsNameB.net", "test", ".network", "hsNameC.net", "hsNameD.com" }; //Сформировать запрос на получение адресов Интернета, //оканчивающихся на .net. var netAddrs = from addr in strs where addr.Length > 4 && addr.EndsWith(".net", StringComparison.Ordinal) select addr; // Выполнить запрос и вывести его результаты. foreach(var str in netAddrs) Console.WriteLine(str); } } 18) hsNameB.net hsNameC.net 19) orderby элемент порядок 20) Листинг 9.5 // Продемонстрировать применение оператора orderby. using System; using System.Linq; class OrderbyDemo { static void Main() { int[] nums = { 10, -19, 4, 7, 2, -5, 0 }; // Сформировать запрос на получение значений в // отсортированном порядке. var posNums = from n in nums orderby n select n; Console.Write("Значения по нарастающей: "); // Выполнить запрос и вывести его результаты. foreach(int i in posNums) Console.Write(i + " "); Console.WriteLine(); } } 21) Значения по нарастающей: -19 -5 0 2 4 7 10 22) var posNums = from n in nums orderby n descending select n; 23) orderby элемент_А направление, элемент_В направление, элемент_С направление, ... 24) Листинг 19.6 // Сортировать результаты запроса по нескольким // критериям, используя оператор orderby. using System; using System.Linq; class Account { public string public string public double public string FirstName { get; private set; } LastName { get; private set; } Balance { get; private set; } AccountNumber { get; private set; } public Account(string fn, string ln, string accnum, double b) { FirstName = fn; LastName = ln; AccountNumber = accnum; Balance = b; } } class OrderbyDemo { static void Main() { // Сформировать исходные данные. Account[] accounts = { new Account("Том", "Смит", "132CK", 100.23), new Account("Том", "Смит", "132CD", 10000.00), new Account("Ральф", "Джонс", "436CD", 1923.85), new Account("Ральф", "Джонс", "454MM", 987.132), new Account("Тед", "Краммер", "897CD", 3223.19), new Account("Ральф", "Джонс", "434CK", -123.32), new Account("Сара", "Смит", "543MM", 5017.40), new Account("Сара", "Смит", "547CD", 34955.79), new Account("Сара", "Смит", "843CK", 345.00), new Account("Альберт", "Смит", "445CK", -213.67), new Account("Бетти", "Краммер","968MM", 5146.67), new Account("Карл", "Смит", "078CD", 15345.99), new Account("Дженни", "Джонс", "108CK", 10.98) }; // Сформировать запрос на получение сведений о // банковских счетах в отсортированном порядке. // Отсортировать эти сведения сначала по имени, затем // по фамилии и, наконец, по остатку на счете. var accInfo = from acc in accounts orderby acc.LastName, acc.FirstName, acc.Balance select acc; Console.WriteLine("Счета в отсортированном порядке: "); string str = ""; // Выполнить запрос и вывести его результаты. foreach(Account acc in accInfo) { if(str != acc.FirstName) { Console.WriteLine(); str = acc.FirstName; } Console.WriteLine( "{0},{1}\tAcc#: {2}, {3,10:C}", acc.LastName, acc.FirstName, acc.AccountNumber, acc.Balance); } Console.WriteLine(); } } 25) Счета в отсортированном порядке: Джонс, Дженни Номер счета: 108CK, $10.98 Джонс, Ральф Джонс, Ральф Джонс, Ральф Номер счета: 434CK, Номер счета: 454MM, Номер счета: 454CD, ($123.32) $987.13 $1,923.85 Краммер, Бетти Номер счета: 968MM, $5,146.67 Краммер, Тед Номер счета: 897CD, $3,223.19 Смит, Альберт Номер счета: 445CK, ($213.67) Смит, Карл Номер счета: 078CD, $15,345.99 Смит, Сара Смит, Сара Смит, Сара Номер счета: 843CK, Номер счета: 543MM, Номер счета: 547CD, $345.00 $5,017.40 $34,955.79 Смит, Том Смит, Том Номер счета: 132CK, Номер счета: 132CD, $100.23 $10,000.00 26) var accInfo = from асc in accounts orderby acc.LastName, acc.FirstName, acc.Balance select acc; 27) Джонс, Дженни Номер счета: 108CK, $10.98 Джонс, Ральф Номер счета: 434CK, ($123.32) Джонс, Ральф Номер счета: 454MM, $987.13 Джонс, Ральф Номер счета: 454CD, $1,923.85 28) var accInfo = from асе in accounts orderby x.LastName, x.FirstName, x.Balance descending select acc; Джонс, Дженни Номер счета: 108CK, $10.98 Джонс, Ральф Джонс, Ральф Джонс, Ральф Номер счета: 454CD, Номер счета: 454MM, Номер счета: 434CK, $1,923.85 $987.13 ($123.32)