Except LINQ
Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с LINQ To Entities. В прошлой статье я рассказывал про пересечение результатов выборок. В данной небольшой статье я бы хотел рассказать про то, как найти элементы, которые присутствуют в одной выборке, но отсутствуют в другой. За это отвечает метод Except() в LINQ.
Рассмотрим сразу код:
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())
{
// Добавим 5 стран
List<Country> countriesList = new List<Country>
{
new Country { Name = "Russia", Population = 145000000},
new Country { Name = "France", Population = 67000000},
new Country { Name = "Germany", Population = 82000000},
new Country { Name = "England", Population = 53000000},
new Country { Name = "Spain", Population = 46000000}
};
db.Countries.AddRange(countriesList);
db.SaveChanges();
var result1 = db.Countries.Where(pop => pop.Population > 30000000 && pop.Population < 100000000)
.Except(db.Countries.Where(pop => pop.Population < 60000000));
foreach (var obj in result1)
{
Console.WriteLine("Название страны: {0}", obj.Name);
// France
// Germany
}
}
Console.WriteLine("Нажмите клавишу для продолжения...");
Console.ReadLine();
}
}
}
В данном коде мы находим элементы первой выборки, которые отсутствуют во второй. Результат первой выборки: Франция, Германия, Англия, Испания. Результат второй выборки: Англия, Испания. Во второй выборке отсутствуют Франция и Германия, поэтому эти страны будут находиться в переменной "result1".
Под хайдом приведу остальной код:
Класс "Country":
class Country
{
// id страны
public int Id { get; set; }
// Название страны
public string Name { 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; }
}
}
В данной статье вы узнали про метод Except() в LINQ.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.



