Я новичок в LINQ, я начал писать этот запрос:оптимизируют LINQ запрос с соответствующими субъектами
var dProjects = Projects
.Select(p => new Models.Project {
ProjectID = p.ProjectID,
Status = p.Status,
ExpiresOn = p.ExpiresOn,
LatestComments = p.ProjectComments
.OrderByDescending(pc => pc.CreatedOn)
.Select(pc => pc.Comments)
.FirstOrDefault(),
ProjectFileIDs = p.ProjectFiles
.Select(pf => pf.BinaryFileID)
.AsQueryable()
})
.AsQueryable<Models.Project>();
Я уже знаю, этот запрос будет работать очень медленно, поскольку связанные объекты, такие как ProjectComments
и ProjectFiles
будут создавать вложенные выбирает, хотя он работает и дает мне правильные результаты, которые мне нужны.
Как я могу оптимизировать этот запрос и получать те же результаты? Одно из моих предположений будет использовать inner join
, но ProjectComments
и ProjectFiles
уже имеют отношения в базе данных через ключи, поэтому не уверены, чего мы можем достичь, установив отношения снова.
В принципе, необходимо знать, какой из них лучше всего подходит с точки зрения производительности. Стоит отметить, что я сортирую ProjectComments
и беру только последнее. Должен ли я использовать комбинацию join
и group by into
? Помощь будет высоко оценена. Благодарю.
ОБНОВЛЕНО:
Извините, если я не был достаточно ясно, что я пытаюсь сделать. В принципе, у меня есть сетка, которая показывает список проектов с последними комментариями проекта и список всех файлов, связанных с проектом, поэтому пользователи могут щелкнуть по этим ссылкам и фактически открыть эти документы. Таким образом, запрос, который я выше работает и он показывает следующее в сетке:
ID проекта (из таблицы Project) Статус (Из таблицы Project) ExpiresOn (Из таблицы Project) LatestComments (последнюю запись из Таблица ProjectComments, которая имеет идентификатор проекта как внешний ключ) ProjectFileIDs (список идентификаторов файлов из таблицы ProjectFiles с идентификатором проекта как внешним ключом - я использую эти идентификаторы файлов и создаю ссылки, чтобы пользователи могли открывать эти файлы).
Итак, все работает, у меня есть все настройки, но запрос выполняется очень медленно. Прямо сейчас у нас очень мало данных (только тестовые данные), но как только это запущено, я ожидаю много пользователей/данных, и поэтому я хочу оптимизировать этот запрос до лучших результатов, прежде чем он начнет жить. Итак, цель здесь - в основном оптимизировать. Я уверен, что это не лучший подход, потому что это создаст вложенные select.
Вы действительно не объяснили, что вы пытаетесь достичь с помощью этого запроса - попробуйте добавить более подробную информацию, чтобы люди, которые не знают о том, над чем вы работаете, все еще могут помочь: что это такое вам нужно как вывод, есть ли данные, полученные этим запросом, которые вам не нужны, какой бит замедляет его? –
Вы используете EntityFramework? – devuxer
Да, я использую EF – user2611218