Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 268
- Предыдущая
- 268/642
- Следующая
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с<>EnumerablefrominwhereorderbyПостроение выражений запросов с использованием типа Enumerable и лямбда-выражений
Имейте в виду, что применяемые здесь операции запросов LINQ представляют собой сокращенные версии вызова расширяющих методов, определенных в типе
EnumerableQueryStringsWithEnumerableAndLambdas()Enumerablestatic 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()currentVideoGamesArrayEnumerableEnumerable.Where()System.Func<T1,TResult>IEnumerable<T>Возвращаемое значение метода
Where()OrderedEnumerableOrderBy()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)- Предыдущая
- 268/642
- Следующая
