Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 454 455 456 457 458 459 460 461 462 ... 642

{

  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<CustomerOrderViewModel>().HasNoKey()

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

Экземпляр DbSet<T> для моделей представлений предлагает всю мощь запросов DbSet<T> для сущности с ключом. Отличие касается возможностей обновления. Изменения модели представления не могут быть сохранены в базе данных, тогда как изменения сущностей с ключами — могут. Добавьте в файл класса 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]

Фильтрация записей

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

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

[Fact]

public void ShouldGetCustomersWithLastNameW()

{

  IQueryable<Customer> query = Context.Customers

<b>    .Where(x =&gt; x.PersonalInformation.LastName.StartsWith(&quot;W&quot;));</b>

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  var qs = query.ToQueryString();

  List&lt;Customer&gt; 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]

public void ShouldGetCustomersWithLastNameWAndFirstNameM()

{

  IQueryable&lt;Customer&gt; query = Context.Customers

<b>    .Where(x =&gt; x.PersonalInformation.LastName.StartsWith(&quot;W&quot;))</b>

<b>    .Where(x =&gt; x.PersonalInformation.FirstName.StartsWith(&quot;M&quot;));</b>

  var qs = query.ToQueryString();

  List&lt;Customer&gt; customers = query.ToList();

  Assert.Single(customers);

}

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

[Fact]

public void ShouldGetCustomersWithLastNameWAndFirstNameM()

{

  IQueryable&lt;Customer&gt; query = Context.Customers

<b>    .Where(x =&gt; x.PersonalInformation.LastName.StartsWith(&quot;W&quot;) &amp;&amp;</b>

<b>                x.PersonalInformation.FirstName.StartsWith(&quot;M&quot;));</b>

  var qs = query.ToQueryString();

  List&lt;Customer&gt; customers = query.ToList();

  Assert.Single(customers);

}

Оба запроса транслируются в такой код SQL:

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

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

1 ... 454 455 456 457 458 459 460 461 462 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий