LINQ. Некоторые примеры работы с интерфейсом IEnumerable.
Теги: LINQ, C#, IEnumerable, Примеры
Для начала создадим класс который генерирует коллекцию чисел от 1 до 100:
public class TestSet : IEnumerable<int>
{
public IEnumerator<int> GetEnumerator()
{
for (int i = 1; i <= 100; i++)
{
yield return i;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Расширение Where
. Выводим все числа, которые больше 50-ти:
static void Main(string[] args)
{
TestSet set = new TestSet();
var filteredTest = set.Where(s => s > 50);
foreach(int i in filteredTest)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
Расширение Select
. Обрамляем все числа звёздочками:
static void Main(string[] args)
{
TestSet set = new TestSet();
var resultTest = set.Select(s => "*" + s.ToString() + "*");
foreach(var i in resultTest)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
Совмещаем два предыдущих примера. Выводим числа от 1 до 50-ти, обрамлёнными звёздочками:
static void Main(string[] args)
{
TestSet set = new TestSet();
var resultTest = set.Where(s => s > 50).Select(s => "*" + s.ToString() + "*");
foreach(var i in resultTest)
{
Console.WriteLine(i);
}
Console.ReadLine();
}
Расширение Aggregate
. Возвращаем сумму всех чисел от 1 до 100:
static void Main(string[] args)
{
TestSet set = new TestSet();
var resultTest = set.Aggregate(0, (acc, i) => acc + i);
Console.WriteLine(resultTest);
Console.ReadLine();
}
Расширение OrderBy
. Сортируем числа от 1 до 100 следующим образом: сначала нечётные, затем чётные. Для этого с помощью метода Select
создадим анонимный тип данных, который первым параметром будет содержать само число, и вторым - true или false, в зависимости от того, является это число чётным или не является:
static void Main(string[] args)
{
TestSet set = new TestSet();
var resultTest = set.Select(i => new { Number = i, IsEven = i % 2 == 0 }).OrderBy(r => r.IsEven);
foreach (var i in resultTest)
{
Console.WriteLine(i.Number);
}
Console.ReadLine();
}
Источник с объяснением механизма работы расширений LINQ находится тут: https://www.youtube.com/watch?v=UmCTRuEwK3U