C# NET Core LINQ To Entities удваивает подзапрос для сортировкиC#

Место общения программистов C#
Ответить
Anonymous
 C# NET Core LINQ To Entities удваивает подзапрос для сортировки

Сообщение Anonymous »

Я работаю с веб-APi EF Core 6.0.
Npgsql.EntityFrameworkCore.PostgreSQL 6.0.29
PostgreSQL 16.3
У меня есть база данных (Postgres) с музыкальными объектами и уроками. Уроки, связанные с музыкальными объектами по свойству навигации. Я хочу отсортировать музыкальные объекты по дате последнего урока. У меня есть проекция в качестве модели предметной области.
new DomainMusicalEntity
{
Id = entity.Id,
OwnerId = entity.OwnerId,
CreationDate = entity.CreationDate,
Description = entity.Description,
Title = entity.Title,
IsPublic = entity.IsPublic,
IsCompleted = entity.IsCompleted,
YoutubeLink = entity.YoutubeLink,
Author = entity.Author,
UniqueId = entity.UniqueId,
OriginId = entity.OriginId,
DefaultFile = entity.MusicalEntityFiles.FirstOrDefault(x => x.IsDefault == true),
LastLessonDate = entity.MusicalEntitiesToLessons.Select(x=>x.Lesson.Date).FirstOrDefault(),
}

Выполните сортировку в SQL по LINQ to Entities.
MusicalEntitySort.LastLessonDate => filter.SortDirection == SortDirection.Desc
? query.OrderByDescending(x => x.LastLessonDate)
: query.OrderBy(x => x.LastLessonDate),

В SQL у меня есть этот запрос (postgresql):
SELECT t.id, t.owner_id, t.creation_date, t.description, t.title, t.is_public, t.is_completed, t.youtube_link, t.author, t.unique_id, t.origin_id, (
SELECT l0.date
FROM musical_entities_to_lessons AS m2
INNER JOIN lessons AS l0 ON m2.lesson_id = l0.id
WHERE t.id = m2.musical_entity_id
LIMIT 1), t0.id, t0.file_path, t0.is_default, t0.musical_entity_id, t0.original_name
FROM (
SELECT m.id, m.author, m.creation_date, m.description, m.is_completed, m.is_public, m.origin_id, m.owner_id, m.title, m.unique_id, m.youtube_link
FROM musical_entities AS m
WHERE m.owner_id = @__filter_OwnerId_0
LIMIT @__p_2 OFFSET @__p_1
) AS t
LEFT JOIN (
SELECT t1.id, t1.file_path, t1.is_default, t1.musical_entity_id, t1.original_name
FROM (
SELECT m1.id, m1.file_path, m1.is_default, m1.musical_entity_id, m1.original_name, ROW_NUMBER() OVER(PARTITION BY m1.musical_entity_id ORDER BY m1.id) AS row
FROM musical_entity_files AS m1
WHERE m1.is_default = TRUE
) AS t1
WHERE t1.row

Подробнее здесь: https://stackoverflow.com/questions/797 ... or-sorting
Ответить

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

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

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

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

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