у меня есть таблица, которая выглядит, как это отслеживание, когда человек начал проект:Linq запрос, чтобы найти диапазон дат
PersonId
ProjectId
StartDate
Я хочу использовать LINQ (LINQ к лицам), чтобы получить результат установить как этот
PersonId
ProjectId
StartDate
EndDate
Где EndDate является StartDate их следующего проекта (если не заказан StartDate) или нулевое значение, если нет более недавний проект.
Это то, что я сделал:
context.PersonProjects.Select(pp => new {
pp.PersonId,
pp.ProjectId,
pp.StartDate,
EndDate = context.PersonProjects.Where(pp2 => pp2.PersonId == pp.PersonId && pp2.StartDate > pp.StartDate).OrderBy(pp2 => pp2.StartDate).Select(pp2 => pp2.StartDate).FirstOrDefault()
})
Есть ли более производительный способ сделать это?
Спасибо, это имеет смысл. Эта конкретная таблица имеет около 300K строк, поэтому я не уверен, что загружаю их все в память. Часто я просто хочу получить совокупность этих результатов (например, найти количество людей, которые работали над проектом в течение определенного периода времени), что означает, что это всего лишь базовый запрос для другого запроса, поэтому кажется идеальным для его сохранения. IQuerya ble – Adam
@Adam Если вы установите «фиксированный цикл» в отдельный метод, который берет правильно упорядоченный список, вы сможете сохранить «IQueryable» и выполнять исправление только тогда, когда нужное подмножество находится в памяти. – dasblinkenlight
Правда, я просто не могу использовать «EndDate» для фильтрации результатов до тех пор, пока цикл исправления не будет установлен. Иногда я захочу. Мне, возможно, придется сделать некоторые тесты и посмотреть, как это сравнивается. – Adam