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