2016-09-22 3 views
1

я пытаюсь сделать это Linq запроса:EF Карта Последний объект в списке объектов

dataContext.Request.Where(x => x.LatestResponse.IsReviewRequired); 

Проблема заключается в том, что LatestResponseID на самом деле не является столбец на Request таблицы.

Чтобы получить LatestResponse, я должен сделать это SQL:

SELECT .... 
    FROM [doe].[Request] Req 
     LEFT JOIN (
      SELECT MAX(ResponseID) 
      FROM [doe].[Response] 
      GROUP BY [RequestID]) AS Resp ON Req.[RequestID] = Resp.[RequestID] 
     LEFT JOIN [doe].[Response] LatestResp ON Resp.[ResponseID] = LatestResp.[ResponseID] 

Могу ли я map это? Если да, то как?

ответ

1

Вы могли бы сделать что-то вроде этого (если вы хотите обе части присоединиться назад):

var results = dataContext.Requests.Select(request => new 
     { 
      Request = request, 
      LatestResponse = request .Responses.FirstOrDefault(response => response .RequestID == request.Responses.Max(response2 => response2.RequestID)) 
     }); 

Кроме того, если вы пытаетесь просто получить объект запроса назад, но он фильтруется собственности на последнем ответе, вот пример этого:

var results = dataContext.Requests.Select(request => new 
     { 
      Request = request, 
      LatestResponse = request.Responses.FirstOrDefault(response => response.RequestID == request.Responses.Max(response2 => response2.RequestID)) 
     }).Where(request => request.LatestResponse.MyProperty == "Value").Select(request => request.Request); 
Смежные вопросы