Использование .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