Как выполнить этот вложенный запрос на сравнение даты EF в SQLC#

Место общения программистов C#
Anonymous
Как выполнить этот вложенный запрос на сравнение даты EF в SQL

Сообщение Anonymous »

Использование .NET CORE 2.1 и EF CORE 2.1.1 и SQL Server < /p>

Я пытаюсь получить список организаций < /code> и их список сообщений < /code>

Я хочу ограничить его, которые не имели никаких сообщений < /code> в последних 6 месяцах < /p>

ViewModels: < /p>

public class OrganizationViewModel
{
public Guid Id { get; set; }
public IEnumerable CommunicationViewModels { get; set;
}

public class CommunicationViewModel
{
public Guid Id { get; set; }
public DateTime Date { get; set; }

public Guid OrganizationViewModelId { get; set; }
public OrganizationViewModel OrganizationViewModel { get; set; }
}
< /code>

И вот мой запрос: < /p>

DateTime sixMonthsAgo = DateTime.Today.AddMonths(-6);
int pageIndex = 1; // Would be passed in
int pageSize = 3;

IQueryable query = _context.Organizations
.AsNoTracking()
.Select(organization => new OrganizationViewModel
{
CommunicationViewModels = organization.Communications.Select(communication => new CommunicationViewModel
{
Date = communication.Date
})
.OrderByDescending(communication => communication.Date)
.Take(1)
.ToList()
})
.Where(organization =>
(!searchViewModel.LimitToLastSixMonths ||
organization.CommunicationViewModels.Any(communication => communication.Date

Это дает мне ожидаемые результаты, но я вижу в своих журналах, что я выполняю этот запрос на каждой записи, когда я нажимаю .countasync () < /code> и.Skip(..).Take(..)< /code>: < /p>

SELECT CASE
WHEN EXISTS (
SELECT 1
FROM (
SELECT TOP(1) [comm].[Date]
FROM [Communications] AS [comm]
WHERE @_outer_Id = [comm].[OrganizationId]
ORDER BY [comm].[Date] DESC
) AS [t]
WHERE [t].[Date]

Я также вижу эти предупреждения, когда .countasync () < /code> называется (слегка отредактировано): < /p>


microsoft.entityframe work.query: warmining: inemperia in communication {br />
where (false или communicme {br />
where (false или communicm {Из Communication Comm в значении (.. EntityQueryable'1 [.. Models.communication]) orderby [comm] .date desc where? __SIXMONTHSAGO_0) SELECT [CVM] => any ()}) '< /code> не может быть переведено и будет оцениваться локально.

microsoft.entityframeworkcore.query: предупреждение: выражение Linq' Count () 'не может быть переведено и будет оцениваться локально. Ошибки при. Microsoft.entityframeworkcore.query: Предупреждение: выражение LINQ 'Skip (__ P_1)' не может быть переведено и будет оцениваться локально.

microsoft.entityframeworkcore.quer />
Это не происходит, когда searchviewmodel.limittolastsixmonths < /code> является false < /p>

Любые предложения о том, как я могу переписать свой запрос, чтобы не выполнять этот запрос локально по каждой записи? < /p>

Подробнее здесь: https://stackoverflow.com/questions/525 ... ery-in-sql

Вернуться в «C#»