Итак, у меня есть запрос, чтобы получить список чатов с двумя пользователями (включая их изображения) и последнее сообщение.
Из-за этого подзапроса последнего сообщения выдается исключение. :
"Выражение 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
Почему запрос EF Core LINQ работает нормально для одного дочернего элемента и не работает для другого? ⇐ C#
Место общения программистов C#
1733403657
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();
Подробнее здесь: [url]https://stackoverflow.com/questions/79253098/why-ef-core-linq-query-works-okay-for-one-child-and-does-not-work-for-another-on[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия