LINQ Intersect
Всем доброго времени суток. На связи Алексей Гулынин. Продолжаем работать с LINQ To Entities. В прошлой статье я рассказывал про объединение результатов выборок. В данной небольшой статье я бы хотел рассказать про пересечение результатов выборок, т.е. это данные, которые одновременно присутствуют во всех выборках. За это отвечает метод Intersect() в 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 > 60000000) .Intersect(db.Countries.Where(name => name.Name.Equals("France"))); foreach (var obj in result1) { Console.WriteLine("Название страны: {0}", obj.Name); // Результат: // Франция } } Console.WriteLine("Нажмите клавишу для продолжения..."); Console.ReadLine(); } } }
Под хайдом приведу остальной код:
Класс "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; } } }
Результат первой выборки вернёт нам 3 страны (Россия, Франция, Германия). Результат второй выборки вернёт только Францию. Метод Intersect() проверяет какие данные есть в первой и второй выборках, и эти общие данные возвращает. В обеих выборках есть только Франция, поэтому данная страна и будет находиться в переменной "result1".
В данной статье вы узнали о том, как находить пересечение выборок в LINQ.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.