У меня есть следующее в linq-to-entity
clientprojects = (from p in this.SAPMappingEntities.SAP_Master_Projects
join c in this.SAPMappingEntities.SAP_Master_ProjectPartners on c.project_no equals p.project_no
where c.partner_name.Contains(clientstring)
orderby p.start descending
select new ClientProjects { client = c.partner_name, location = c.city +", "+c.region, project_no = c.project_no, start_dt = p.start, end_dt = p.finish }).Take(50).ToList();
Я хотел бы изменить этот запрос, чтобы для каждого SAP_Master_Project получать только запись SAP_Master_ProjectPartners, которая имеет последнее update_dt. Как я могу это сделать?
РЕДАКТИРОВАТЬ
Есть таблица проекта с номером проекта и деталями проекта, включая даты начала и окончания. Есть таблица партнеров проекта с номером партнера проекта, именем, номером проекта, дата обновления и другие сведения.
SAP_MASTER_PROJECT
номер_проекта
начало
окончание
SAP_MASTER_PROJECTPARTNERS
номер_партнера
номер_проекта
имя_партнера
город
регион
update_dt
Когда пользователь вводит "ABC" в текстовое поле, информация, которую я хочу вернуть, является профессиональной. номер объекта, дата начала проекта, дата окончания проекта плюс имя партнера по проекту, город и штат из последней записи партнера по проекту для последних 50 проектов (в зависимости от даты начала), где имя партнера по проекту содержит или имеет вид «ABC».
Я уверен, что есть несколько способов сделать это, но его SQL дает мне нужные результаты:
SELECT TOP 50 p.project_no, p.start, p.finish, c.partner_name, c.city, c.region
FROM
(select pp.project_no, pp.partner_name, pp.city, pp.region
from SAP_Master_ProjectPartners pp
where pp.partner_name LIKE @clientstring AND pp.update_dt = (select max(pp1.update_dt)
from SAP_Master_ProjectPartners pp1
where pp1.project_no = pp.project_no)) c
join SAP_Master_Projects p
on (p.project_no = c.project_no)
ORDER BY p.start DESC
РЕДАКТИРОВАТЬ # 2 Этот sql фактически возвращает несколько элементов, которые имеют тот же update_dt, поэтому я изменил sql ниже. Все еще не могу преобразовать в linq.
SELECT TOP 50 p.project_no, p.start, p.finish, c.partner_name, c.city, c.region, c.update_dt, c.row_id
FROM SAP_Master_Projects p
join
(select pp.project_no, pp.partner_name, pp.city, pp.region, pp.update_dt, pp.row_id
from SAP_Master_ProjectPartners pp
where pp.partner_name LIKE @clientstring AND pp.row_id = (select TOP 1 row_id
from SAP_Master_ProjectPartners pp1
where pp1.project_no = pp.project_no order by update_dt DESC)) c
on (p.project_no = c.project_no) where p.active_flag = 1
ORDER BY p.start DESC