LINQ Intersect

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.

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


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

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

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