LINQ Where
Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с Entity Framework. В данной статье я бы хотел начать разбирать технологию LINQ To Entities. В SQL есть оператор WHERE, который служит для фильтрации данных. В LINQ тоже есть специальный метод Where(), который служит для этих же целей. В данной статье мы как раз и рассмотрим Where в LINQ. Для начала создадим класс "Country", который будет описывать нашу базу данных. Данный класс будет иметь следующие свойства: id, name (название страны), capital (столица), population (численность населения):
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 возвращают два объекта: IEnumerable (интерфейс, который находится в пространстве имен System.Collections) и IQueryable (интерфейс — пространство имен System.Linq).
Класс "Program":
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();
// Интерфейс IEnumerable
IEnumerable<Country> countries = db.Countries.ToList();
IEnumerable<Country> countries_result1;
IEnumerable<Country> countries_result2;
IEnumerable<Country> countries_result3;
// Интерфейс IQueryable
//IQueryable<Country> countries = db.Countries;
// Получаем страны с населением более 100 млн. человек
countries_result1 = countries.Where(c => c.Population > 100000000);
Console.WriteLine("Выборка 1: ");
// Здесь будет только Россия
foreach (var country in countries_result1)
{
Console.WriteLine("{0} : {1}", country.Name, country.Capital);
}
// Получаем страны с населением более 60 млн. человек, но менее 100 млн.
countries_result2 = countries.Where(c => c.Population > 60000000 && c.Population < 100000000);
Console.WriteLine("Выборка 2: ");
// Здесь будут Германия и Франция
foreach (var country in countries_result2)
{
Console.WriteLine("{0} : {1}", country.Name, country.Capital);
}
// Получаем страны с населением более 80 млн. человек или равным 46 млн. человек
countries_result3 = countries.Where(c => c.Population > 80000000 || c.Population == 46000000);
Console.WriteLine("Выборка 3: ");
// Здесь будут Россия, Германия, Испания
foreach (var country in countries_result3)
{
Console.WriteLine("{0} : {1}", country.Name, country.Capital);
}
}
Console.WriteLine("Нажмите клавишу для продолжения...");
Console.ReadLine();
}
}
}
Строка "countries.Where(c => c.Population > 100000000)" соответствует следующему запросу SQL:
SELECT Name, Capital FROM Countries WHERE Population > 100000000
Строка "countries.Where(c => c.Population > 60000000 && c.Population < 100000000)":
SELECT Name, Capital FROM Countries WHERE Population > 60000000 AND Population < 100000000
Строка "countries.Where(c => c.Population > 80000000 || c.Population == 46000000)":
SELECT Name, Capital FROM Countries WHERE Population > 80000000 OR Population = 46000000
В данной статье мы рассмотрели Where в LINQ.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.




