Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
using System.Linq;
static void QueryStringWithOperators()
{
Console.WriteLine("***** Using Query Operators *****");
string[] currentVideoGames = {"Morrowind", "Uncharted 2",
"Fallout 3", "Daxter", "System
Shock 2"};
var subset = from game in currentVideoGames
where game.Contains(" ") orderby game select game;
foreach (string s in subset)
{
Console.WriteLine("Item: {0}", s);
}
}
Очевидное преимущество использования операций запросов C# при построении выражений запросов заключается в том, что делегаты
Funс<>
Enumerable
from
in
where
orderby
Построение выражений запросов с использованием типа Enumerable и лямбда-выражений
Имейте в виду, что применяемые здесь операции запросов LINQ представляют собой сокращенные версии вызова расширяющих методов, определенных в типе
Enumerable
QueryStringsWithEnumerableAndLambdas()
Enumerable
static void QueryStringsWithEnumerableAndLambdas()
{
Console.WriteLine("***** Using Enumerable / Lambda Expressions *****");
string[] currentVideoGames = {"Morrowind", "Uncharted 2",
"Fallout 3", "Daxter", "System
Shock 2"};
// Построить выражение запроса с использованием расширяющих методов,
// предоставленных типу Array через тип Enumerable.
var subset = currentVideoGames
.Where(game => game.Contains(" "))
.OrderBy(game => game).Select(game => game);
// Вывести результаты.
foreach (var game in subset)
{
Console.WriteLine("Item: {0}", game);
}
Console.WriteLine();
}
Здесь сначала вызывается расширяющий метод
Where()
currentVideoGames
Array
Enumerable
Enumerable.Where()
System.Func<T1,TResult>
IEnumerable<T>
Возвращаемое значение метода
Where()
OrderedEnumerable
OrderBy()
Func<>
OrderBy()
И, наконец, осуществляется вызов метода
Select()
OrderBy()
subset
Конечно, такой "длинный" запрос LINQ несколько сложнее для восприятия, чем предыдущий пример с операциями запросов LINQ. Без сомнения, часть сложности связана с объединением в цепочку вызовов посредством операции точки. Вот тот же самый запрос с выделением каждого шага в отдельный фрагмент (разбивать запрос на части можно разными способами):
static void QueryStringsWithEnumerableAndLambdas2()
{
Console.WriteLine("***** Using Enumerable / Lambda Expressions *****");
string[] currentVideoGames = {"Morrowind", "Uncharted 2",
"Fallout 3", "Daxter", "System
Shock 2"};
// Разбить на части.
var gamesWithSpaces =
currentVideoGames.Where(game => game.Contains(" "));
var orderedGames = gamesWithSpaces.OrderBy(game => game);
var subset = orderedGames.Select(game => game);
foreach (var game in subset)