2011-12-21 60 views
2

我一直在敲打我的頭撞在牆上試圖轉換一個簡單的SQL查詢到EF查詢..實體框架查詢與MAX

誰能幫助請..以下是我嘗試翻譯查詢。

SELECT p.[UniqueId] 
    ,p.[CAI] 
    ,p.[HRGuid] 
    ,p.[FullName] 
    ,p.[Email] 
    ,a.* 
FROM [Participant] p 
INNER JOIN 
(
    Select * FROM Assignment where assignmentNumber = 
    (Select MAX(AssignmentNumber)FROM 
    Assignment GROUP BY UniqueId) 
) a 
ON p.UniqueId = a.UniqueId 

基本上我試圖讓參與者與他們的最新作業一起。

回答

0

您將需要使用Linq-Objects創建您的Participant實體。您需要在AsEnumerable後自定義以創建您的實體

var query = (from p in context.Participant 
      join a in context.Assignment on p.UniqueId equals a.UniqueId into ag 
      select new 
      { 
       Participant = p, 
       Assignment = ag.OrderByDescending(x => x.AssignmentNumber).FirstOrDefault() 
      }).AsEnumerable() 
       .Select(x => new Participant(x.Participant) 
        {  
         Assignments = new Assignment[] { x.Assignment } 
        }; 
+0

感謝您的快速響應。這確實是我正在尋找的。但是我不想要匿名類型。是否有任何可能讓我獲得實體(假設我正在投影參與者的所有列)。 – Armaghan 2011-12-21 19:02:26

+0

@Armaghan - 你能向我展示參與者和作業實體的結構嗎?我修改了答案,將linq添加到對象步驟 – Aducci 2011-12-21 19:08:49

+0

參與者和分配是POCO實體。 – Armaghan 2011-12-21 19:28:52