Почему запрос EF Core LINQ работает нормально для одного дочернего элемента и не работает для другого?C#

Место общения программистов C#
Ответить
Anonymous
 Почему запрос EF Core LINQ работает нормально для одного дочернего элемента и не работает для другого?

Сообщение Anonymous »

Итак, у меня есть запрос, чтобы получить список чатов с двумя пользователями (включая их изображения) и последнее сообщение.
Из-за этого подзапроса последнего сообщения выдается исключение. :

"Выражение LINQ 'ROW_NUMBER() OVER(PARTITION BY p5.P2pChatId
ORDER BY p5.CreatedOn DESC)' не удалось перевести. Либо перепишите
запрос в форме, которую можно перевести, либо явно переключитесь на клиентское
вычисление, вставив вызов 'AsEnumerable',
'AsAsyncEnumerable', 'ToList. 'или 'ToListAsync' для получения дополнительной информации см.
https://go.microsoft.com/fwlink/?linkid=2101038."

LastMessage = x.P2pChatMessages
.OrderByDescending(y => y.CreatedOn)
.Select(y => new P2pChatMessageViewModel()
{
Id = y.Id,
ChatId = y.P2pChatId,
UserId = y.UserId,
CreatedOn = y.CreatedOn.ToString("s") + "+00:00",
Text = y.Text,
})
.FirstOrDefault()

Мой вопрос заключается в том, почему этот подзапрос завершается неудачей, в то время как тот же подзапрос, указанный выше, проходит нормально:
Person2 = x.Person2 == null ? null : new UserViewModel()
{
Id = x.Person2.Id,
Username = x.Person2.UserName,
Email = x.Person2.Email,
ProfilePicture = new ImageViewModel()
{
UserId = x.Person2.Id,
Url = x.Person2.ProfilePictures.OrderByDescending(y => y.CreatedOn).Select(y => y.Image.Url).FirstOrDefault(),
Id = x.Person2.ProfilePictures.OrderByDescending(y => y.CreatedOn).Select(y => y.Image.Id).FirstOrDefault(),
},
},

Полный запрос:
var list = await _db.P2pChats
.OrderByDescending(x => x.P2pChatMessages.Any(y => !y.IsRead))
.Select(x => new P2pChatViewModel
{
Id = x.Id,
Person1 = x.Person1 == null ? null : new UserViewModel()
{
Id = x.Person1.Id,
Username = x.Person1.UserName,
Email = x.Person1.Email,
ProfilePicture = new ImageViewModel()
{
UserId = x.Person1.Id,
Url = x.Person1.ProfilePictures.OrderByDescending(y => y.CreatedOn).Select(y => y.Image.Url).FirstOrDefault(),
Id = x.Person1.ProfilePictures.OrderByDescending(y => y.CreatedOn).Select(y => y.Image.Id).FirstOrDefault(),
},
},
Person2 = x.Person2 == null ? null : new UserViewModel()
{
Id = x.Person2.Id,
Username = x.Person2.UserName,
Email = x.Person2.Email,
ProfilePicture = new ImageViewModel()
{
UserId = x.Person2.Id,
Url = x.Person2.ProfilePictures.OrderByDescending(y => y.CreatedOn).Select(y => y.Image.Url).FirstOrDefault(),
Id = x.Person2.ProfilePictures.OrderByDescending(y => y.CreatedOn).Select(y => y.Image.Id).FirstOrDefault(),
},
},
LastMessage = x.P2pChatMessages
.OrderByDescending(y => y.CreatedOn)
.Select(y => new P2pChatMessageViewModel()
{
Id = y.Id,
ChatId = y.P2pChatId,
UserId = y.UserId,
CreatedOn = y.CreatedOn.ToString("s") + "+00:00",
Text = y.Text,
})
.FirstOrDefault()
})
.Take(50)
.ToListAsync();


Подробнее здесь: https://stackoverflow.com/questions/792 ... another-on
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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