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

30 06 2016

Теги заметки: