У меня есть две таблицы: Задачи и Задачи.Я хочу, чтобы запрос возвращал самый последний прошедший этап и ближайший будущий TaskMilestone для каждой задачи.Я работаю с C # / LINQ-to-SQL.Как мне это сделать?
Столбцы задач: Id, TaskName Столбцы TaskMilestones: Id, TaskId, MilestoneName, MilestoneDate
Мне нужна таблица возврата со строками, содержащей: TaskName, MilestoneDate, MilestoneName
Мой текущийРешение заставляет Linq запрашивать базу данных один раз для каждой Задачи, что является недопустимо медленным.
[РЕДАКТИРОВАТЬ, чтобы адресовать комментарии] Текущая реализация проста, а не один оператор, она просто запрашивает список Задач, а затем запрашиваетдля каждого TaskId дважды с соответствующими предложениями where:
var x = from p in this.Database.Task
join pm in this.Database.TaskMilestones on p.Id equals pm.TaskId
select new
{
TaskId = p.Id,
TaskName = p.Name,
MilestoneName = m.Name,
MilestoneDate = pm.MilestoneDate,
};
foreach (var record in records)
{
var y = x.Where(p => p.TaskId == record.Id && p.MilestoneDate <= dt);
var z = x.Where(p => p.TaskId == record.Id && p.MilestoneDate > dt);
...