2016-09-22 40 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);