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

Вспомните, что при использовании LINQ для запрашивания из базы данных списка сущностей запрос не выполняется до тех пор, пока не начнется проход по результатам запроса, пока запрос не будет преобразован в List (или объект) либо же пока не произойдет привязка запроса к списковому элементу управления (вроде сетки данных). Запрос единственной записи выполняется немедленно в случае применения вызова First(), Single() и т.д.

Нововведением версии EF Core 5 стало то, что в большинстве запросов LINQ можно вызывать метод ToQueryString() для исследования запроса, который выполняется в отношении базы данных. Для разделяемых запросов метод ToQueryString() возвращает только первый запрос, который будет выполняться. В рассматриваемых далее тестах это значение по возможности присваивается переменной (qs), чтобы вы могли изучить запрос во время отладки тестов.

Первый набор тестов (если только специально не указано иначе) находится в файле класса CustomerTests.cs.

<p id="AutBody_Root1026"><strong>Получение всех записей</strong></p>

Чтобы получить все записи из таблицы, просто используйте свойство DbSet на прямую без каких-либо операторов LINQ. Добавьте приведенный ниже тест [Fact]:

[Fact]

public void ShouldGetAllOfTheCustomers()

{

  var qs = Context.Customers.ToQueryString();

  var customers = Context.Customers.ToList();

  Assert.Equal(5, customers.Count);

}

Выделенный полужирным оператор транслируется в следующий код SQL:

SELECT [c].[Id], [c].[TimeStamp], [c].[FirstName], [c].[FullName],

       [c].[LastName] FROM [Dbo].[Customers] AS [c]

Тот же самый процесс применяется для сущностей без ключей, подобных модели представления CustomerOrderViewModel, которая сконфигурирован на получение своих данных из представления CustomerOrderView:

modelBuilder.Entity().HasNoKey()

  .ToView("CustomerOrderView", "dbo");

Экземпляр DbSet для моделей представлений предлагает всю мощь запросов DbSet для сущности с ключом. Отличие касается возможностей обновления. Изменения модели представления не могут быть сохранены в базе данных, тогда как изменения сущностей с ключами — могут. Добавьте в файл класса OrderTest.cs показанный далее тест, чтобы продемонстрировать получение данных из представления:

public void ShouldGetAllViewModels()

{

  var qs = Context.Orders.ToQueryString();

  var orders = Context.Orders.ToList();

   Assert.NotEmpty(orders);

  Assert.Equal(5,orders.Count);

}

Выделенный полужирным оператор транслируется в следующий код SQL:

SELECT [c].[Color], [c].[FirstName], [c].[IsDrivable], [c].[LastName],

       [c].[Make], [c].[PetName] FROM [dbo].[CustomerOrderView] AS [c]

<p id="AutBody_Root1027"><strong>Фильтрация записей</strong></p>

Метод Where() используется для фильтрации записей из DbSet. Несколько вызовов Where() можно плавно объединять в цепочку для динамического построения запроса. Выстроенные в цепочку вызовы Where() всегда объединяются с помощью операции "И". Для объединения условий с применением операции "ИЛИ" необходимо использовать один вызов Where().

Приведенный ниже тест возвращает заказчиков с фамилией, начинающейся с буквы "W" (нечувствительно к регистру символов):

[Fact]

public void ShouldGetCustomersWithLastNameW()

{

  IQueryable query = Context.Customers

    .Where(x => x.PersonalInformation.LastName.StartsWith("W"));

  var qs = query.ToQueryString();

  List customers = query.ToList();

  Assert.Equal(2, customers.Count);

}

Запрос LINQ транслируется в следующий код SQL:

SELECT [c].[Id], [c].[TimeStamp], [c].[FirstName], [c].[FullName],

       [c].[LastName] FROM [Dbo].[Customers] AS [c]

WHERE [c].[LastName] IS NOT NULL AND ([c].[LastName] LIKE N'W%')

Показанный далее тест возвращает заказчиков с фамилией, начинающейся с буквы "W" (нечувствительно к регистру символов), и именем, начинающимся с буквы "М" (нечувствительно к регистру символов), а также демонстрирует объединение вызовов Where() в цепочку в запросе LINQ:

[Fact]

Перейти на страницу:

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

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

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

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

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

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

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

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