Получить только одну (последнюю) запись в объединении «один-ко-многим» с помощью linq-to-entity

У меня есть следующее в 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
5
задан Yuval Itzchakov 22 November 2014 в 10:04
поделиться