Читаем Язык программирования C#9 и платформа .NET5 полностью

    FROM [dbo].[Inventory] AS [i0]

    WHERE [i0].[IsDrivable] = CAST(1 AS bit)

  ) AS [t] ON [o].[CarId] = [t].[Id]

    INNER JOIN [Dbo].[Customers] AS [c] ON [o].[CustomerId] = [c].[Id]

    WHERE [t].[IsDrivable] = CAST(1 AS bit)

) AS [t0] ON [i].[Id] = [t0].[CarId]

WHERE ([i].[IsDrivable] = CAST(1 AS bit)) AND EXISTS (

    SELECT 1

    FROM [Dbo].[Orders] AS [o0]

    INNER JOIN (

      SELECT [i1].[Id], [i1].[Color], [i1].[IsDrivable], [i1].[MakeId],

             [i1].[PetName], [i1].[TimeStamp]

      FROM [dbo].[Inventory] AS [i1]

      WHERE [i1].[IsDrivable] = CAST(1 AS bit)

    ) AS [t1] ON [o0].[CarId] = [t1].[Id]

    WHERE ([t1].[IsDrivable] = CAST(1 AS bit)) AND ([i].[Id] = [o0].[CarId]))

ORDER BY [i].[Id], [m].[Id]

Будете вы разделять свои запросы или нет, зависит от существующих бизнес-требований.

<p id="AutBody_Root1039"><strong>Фильтрация связанных данных</strong></p>

В версии EF Core 5 появилась возможность фильтрации при включении навигационных свойств типа коллекций. До выхода EF Core 5 единственным способом получения отфильтрованного списка для навигационного свойства типа коллекций было использование явной загрузки. Добавьте в MakeTests.cs следующий тест, который демонстрирует получение записей производителей, выпускающих автомобили желтого цвета:

[Fact]

public void ShouldGetAllMakesAndCarsThatAreYellow()

{

  var query = Context.Makes.IgnoreQueryFilters()

      .Include(x => x.Cars.Where(x => x.Color == "Yellow"));

     var qs = query.ToQueryString();

  var makes = query.ToList();

  Assert.NotNull(makes);

  Assert.NotEmpty(makes);

  Assert.NotEmpty(makes.Where(x => x.Cars.Any()));

  Assert.Empty(makes.First(m => m.Id == 1).Cars);

  Assert.Empty(makes.First(m => m.Id == 2).Cars);

  Assert.Empty(makes.First(m => m.Id == 3).Cars);

  Assert.Single(makes.First(m => m.Id == 4).Cars);

  Assert.Empty(makes.First(m => m.Id == 5).Cars);

}

Ниже показан сгенерированный код SQL:

SELECT [m].[Id], [m].[Name], [m].[TimeStamp], [t].[Id], [t].[Color],

       [t].[IsDrivable], [t].[MakeId], [t].[PetName], [t].[TimeStamp]

FROM [dbo].[Makes] AS [m]

LEFT JOIN (

  SELECT [i].[Id], [i].[Color], [i].[IsDrivable], [i].[MakeId],

         [i].[PetName], [i].[TimeStamp]

  FROM [dbo].[Inventory] AS [i]

  WHERE [i].[Color] = N'Yellow') AS [t] ON [m].[Id] = [t].[MakeId]

ORDER BY [m].[Id], [t].[Id]

Изменение запроса на разделенный приводит к выдаче такого кода SQL (получен с использованием профилировщика SQL Server):

SELECT [m].[Id], [m].[Name], [m].[TimeStamp]

FROM [dbo].[Makes] AS [m]

ORDER BY [m].[Id]

SELECT [t].[Id], [t].[Color], [t].[IsDrivable], [t].[MakeId],

       [t].[PetName], [t].[TimeStamp], [m].[Id]

FROM [dbo].[Makes] AS [m]

INNER JOIN (

  SELECT [i].[Id], [i].[Color], [i].[IsDrivable], [i].[MakeId],

         [i].[PetName], [i].[TimeStamp]

  FROM [dbo].[Inventory] AS [i]

  WHERE [i].[Color] = N'Yellow'

) AS [t] ON [m].[Id] = [t].[MakeId]

ORDER BY [m].[Id]

<p id="AutBody_Root1040"><strong>Явная загрузка связанных данных</strong></p>
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных