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.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.