LINQ OrderBy

LINQ OrderBy

Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с LINQ To Entities. В данной небольшой статье я бы хотел рассмотреть, как происходит сортировка данных, полученных из базы. В SQL для этого служит оператор ORDER BY. Если мы хотим отсортировать данные в обратном порядке, то используем оператор DESC.

В LINQ для сортировки полученных данных по возрастанию имеется метод OrderBy() или оператор orderby.

Давайте на примере рассмотрим их более подробно. Будем использовать ту же базу данных, что и в прошлой статье:

using System;
using System.Data.Entity;
using System.Collections.Generic;
using System.Linq;

namespace TestProject
{
  class Program
  {
    static void Main(string[] args)
    {
      Database.SetInitializer(new DropCreateDatabaseAlways<MyEFDB>());

      using (MyEFDB db = new MyEFDB())
      {
        Country country1 = new Country { Name = "Russia", Capital = "Moscow", Population = 145000000 };
        Country country2 = new Country { Name = "France", Capital = "Paris", Population = 67000000 };
        Country country3 = new Country { Name = "England", Capital = "London", Population = 53000000 };
        Country country4 = new Country { Name = "Germany", Capital = "Berlin", Population = 82000000 };
        Country country5 = new Country { Name = "Spain", Capital = "Madrid", Population = 46000000 };

        db.Countries.AddRange(new List<Country> { country1, country2, country3, country4, country5 });
        db.SaveChanges();

        // OrderBy - сортировка по возрастанию имени столицы страны
        IQueryable<Country> countries = db.Countries.OrderBy(c => c.Capital);
        ShowInfo(countries);

        // Оператор orderby
        countries = from c in db.Countries
                    orderby c.Capital
                    select c;
        ShowInfo(countries);

        // OrderByDescending - сортировка по убыванию имени столицы страны
        countries = db.Countries.OrderByDescending(c => c.Capital);
        ShowInfo(countries);
        // Оператор descending
        countries = from c in db.Countries
                    orderby c.Capital descending
                    select c;
        ShowInfo(countries);

        // Сортировка данных по нескольким критериям
        var countries_result = db.Countries.Select(p => new { p.Name, p.Capital, p.Population})
                                .OrderBy(p => p.Name)
                                .ThenBy(p => p.Population);
        Console.WriteLine("*******************************************");
        foreach (var country in countries_result)
        {
          Console.WriteLine("{0} : {1} | {2}", country.Name, country.Capital, country.Population);
        }
        Console.WriteLine("*******************************************");
        // Тот же самый пример только написанный по-другому и с использованием операторов
        var countries_result2 = from c in db.Countries
                           orderby c.Name, c.Population
                           select c;
        Console.WriteLine("*******************************************");
        foreach (var country in countries_result)
        {
          Console.WriteLine("{0} : {1} | {2}", country.Name, country.Capital, country.Population);
        }
        Console.WriteLine("*******************************************");
      }

      Console.WriteLine("Нажмите клавишу для продолжения...");
      Console.ReadLine();
    }

    // Выводим информацию о выборке
    public static void ShowInfo(IQueryable<Country> countries)
    {
      Console.WriteLine("*******************************************");
      foreach (var country in countries)
      {
        Console.WriteLine("{0} : {1}", country.Name, country.Capital);
      }
      Console.WriteLine("*******************************************");
    }
  }
}

Пройдёмся немного по методам, которые там используются:

  • Метод OrderBy() или оператор orderby используются для сортировки по возрастанию.
  • Метод OrderByDescending() или оператор descending используются для сортировки по убыванию.
  • Методы ThenBy() (сортировка по возрастанию) и ThenByDescending() (сортировка по убыванию) используются при сортировке данных по нескольким критериям.

Под хайдом приведу остальной код:

Посмотреть код:

Класс "Country":

class Country
{
  // id
  public int Id { get; set; }
  // Название страны
  public string Name { get; set; }
  // Столица
  public string Capital { get; set; }
  // Численность населения
  public long Population { get; set; }
}

Строка подключения будет иметь следующий вид:

<connectionStrings>
  <add name="MyEFDB" connectionString="data source=(LocalDb)\v11.0;initial catalog=MyEFDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

Класс "MyEFDB" (контекст) будет иметь следующий вид:

using System.Data.Entity;

namespace TestProject
{
  class MyEFDB: DbContext
  {
    public MyEFDB(): base("name=MyEFDB")
    { }
    public virtual DbSet<Country> Countries { get; set; }
  }
}

В данной статье мы рассмотрели, как выполняется сортировка данных в запросах LINQ.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *