Console.WriteLine("Names and Descriptions:");
IEnumerable
from p
in products
select new ProductInfoSmall
{ Name=p.Name, Description=p.Description };
foreach (ProductInfoSmall item in nameDesc)
{
Console.WriteLine(item.ToString());
}
}
При проецировании LINQ у вас есть выбор, какой метод использовать (в анонимные или в строго типизированные объекты). Решение, которое вы примете, полностью зависит от имеющихся бизнес-требований.
Подсчет количества с использованием класса Enumerable
Во время проецирования новых пакетов данных у вас может возникнуть необходимость выяснить количество элементов, возвращаемых внутри последовательности. Для определения числа элементов, которые возвращаются из выражения запроса LINQ, можно применять расширяющий метод Count()
Enumerable. Например, следующий метод будет искать в локальном массиве все объекты string, которые имеют длину, превышающую шесть символов, и выводить их количество:static void GetCountFromQuery()
{
string[] currentVideoGames = {"Morrowind", "Uncharted 2",
"Fallout 3", "Daxter", "System
Shock 2"}; // Получить количество элементов из запроса.
int numb =
(from g in currentVideoGames where g.Length > 6 select g).Count();
// Вывести количество элементов.
Console.WriteLine("{0} items honor the LINQ query.", numb);
}
Изменение порядка следования элементов в результирующих наборах на противоположный
Изменить порядок следования элементов в результирующем наборе на противоположный довольно легко с помощью расширяющего метода Reverse
Enumerable. Например, в показанном далее методе выбираются все элементы из входного параметра ProductInfo[] в обратном порядке:static void ReverseEverything(ProductInfo[] products)
{
Console.WriteLine("Product in reverse:");
var allProducts = from p in products select p;
foreach (var prod in allProducts.Reverse())
{
Console.WriteLine(prod.ToString());
}
}
Выражения сортировки
В начальных примерах настоящей главы вы видели, что в выражении запроса может использоваться операция orderby
descending. Взгляните на следующий метод:static void AlphabetizeProductNames(ProductInfo[] products)
{
// Получить названия товаров в алфавитном порядке.
var subset = from p in products orderby p.Name select p;
Console.WriteLine("Ordered by Name:");
foreach (var p in subset)
{
Console.WriteLine(p.ToString());
}
}
Хотя порядок по возрастанию является стандартным, свои намерения можно прояснить, явно указав операцию ascending
var subset = from p in products orderby p.Name ascending select p;
Для получения элементов в порядке убывания служит операция descending
var subset = from p in products orderby p.Name descending select p;
LINQ как лучшее средство построения диаграмм Венна
Класс Enumerable
Except(). Он возвращает результирующий набор LINQ, содержащий разность между двумя контейнерами, которой в этом случае является значение Yugo:static void DisplayDiff()
{
List
new List