У меня есть следующее в 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. Как я могу это сделать?
EDIT
Существует таблица проекта с номером проекта и деталями проекта, включая даты начала и окончания проекта. Есть таблица партнеров проекта с номером партнера проекта, именем, номером проекта, датой обновления и другими деталями.
SAP_MASTER_PROJECT
project_no
начать
отделка
SAP_MASTER_PROJECTPARTNERS
partner_no
project_no
PARTNER_NAME
город
регион
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