Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

DECLARE @__makeId_0 int = 1;

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

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

WHERE [i].[MakeId] = @__makeId_0

Следующий тест

[Theory]
показывает фильтрованный запрос с
CustomerOrderViewModel
(поместите тест в файл класса
OrderTests.cs
):

[Theory]

[InlineData("Black",2)]

[InlineData("Rust",1)]

[InlineData("Yellow",1)]

[InlineData("Green",0)]

[InlineData("Pink",1)]

[InlineData("Brown",0)]

public void ShouldGetAllViewModelsByColor(string color, int expectedCount)

{

var query = _repo.GetOrdersViewModel.Where(x=>x.Color == color);

var qs = query.ToQueryString;

var orders = query.ToList;

Assert.Equal(expectedCount,orders.Count);

}

Для

первого теста
[InlineData]
генерируется такой запрос:

DECLARE @__color_0 nvarchar(4000) = N'Black';

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

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

WHERE [c].[Color] = @__color_0

Сортировка записей

Методы

OrderBy
и
OrderByDescending
устанавливают для запроса сортировку (сортировки) по возрастанию и по убыванию. Если требуются дальнейшие сортировки, тогда используйте методы
ThenBy
и
ThenByDescending
. Сортировка демонстрируется в тесте ниже:

[Fact]

public void ShouldSortByLastNameThenFirstName

{

// Сортировать по фамилии, затем по имени.

var query = Context.Customers

.OrderBy(x => x.PersonalInformation.LastName)

.ThenBy(x => x.PersonalInformation.FirstName);

var qs = query.ToQueryString;

var customers = query.ToList;

// Если есть только один пользователь, то проверять нечего.

if (customers.Count <= 1) { return; }

for (int x = 0; x < customers.Count - 1; x++)

{

var pi = customers[x].PersonalInformation;

var pi2 = customers[x + 1].PersonalInformation;

var compareLastName = string.Compare(pi.LastName,

pi2.LastName, StringComparison.CurrentCultureIgnoreCase);

Assert.True(compareLastName <= 0);

if (compareLastName != 0) continue;

var compareFirstName = string.Compare(pi.FirstName,

pi2.FirstName, StringComparison.CurrentCultureIgnoreCase);

Assert.True(compareFirstName <= 0);

}

}

Предыдущий

запрос LINQ транслируется следующим образом:

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

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

ORDER BY [c].[LastName], [c].[FirstName]

Сортировка записей в обратном порядке

Метод

Reverse
меняет порядок сортировки на противоположный, как видно в представленном далее тесте:

[Fact]

public void ShouldSortByFirstNameThenLastNameUsingReverse

{

// Сортировать по фамилии, затем по имени,

// и изменить порядок сортировки на противоположный.

var query = Context.Customers

.OrderBy(x => x.PersonalInformation.LastName)

.ThenBy(x => x.PersonalInformation.FirstName)

.Reverse;

var qs = query.ToQueryString;

var customers = query.ToList;

// Если есть только один пользователь, то проверять нечего.

if (customers.Count <= 1) { return; }

for (int x = 0; x < customers.Count - 1; x++)

{

var pi1 = customers[x].PersonalInformation;

var pi2 = customers[x + 1].PersonalInformation;

var compareLastName = string.Compare(pi1.LastName,

pi2.LastName, StringComparison.CurrentCultureIgnoreCase);

Assert.True(compareLastName >= 0);

if (compareLastName != 0) continue;

var compareFirstName = string.Compare(pi1.FirstName,

pi2.FirstName, StringComparison.CurrentCultureIgnoreCase);

Assert.True(compareFirstName >= 0);

}

}

Вот во что транслируется предыдущий запрос LINQ:

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

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

Поделиться с друзьями: