2010-01-27 77 views
1

我必須弄清楚如何使用LINQ查詢或方法語法編寫以下SQL查詢。 (編輯:這是爲所有代理返回最新的AgentActivities列表)。在LINQ查詢/方法中加入GroupBy表數據中的多個字段

SELECT 
a.[AgentActivityId], 
a.[AgentId], 
a.[ActivityId], 
a.[StartedAt], 
a.[EndedAt], 
a.[Version] 
FROM 
[dbo].[AgentActivity] a 
INNER JOIN 
(
    SELECT 
    [AgentId], 
    MAX([StartedAt])[StartedAt] 
    FROM 
    [dbo].[AgentActivity] 
    WHERE 
    ([StartedAt] > '2010/01/24 23:59:59') 
    AND ([StartedAt] < '2010/10/25') 
    GROUP BY 
    AgentId 
)grouped 
    ON (a.[AgentId] = grouped.[AgentId] 
    AND a.[StartedAt] = grouped.[StartedAt]) 
+0

我從來沒有見過'之前分組'。你使用的是什麼SQL引擎? – 2010-01-27 14:20:21

+0

'分組'是括號內SELECT查詢返回的內存表的別名。我正在使用MS SQL引擎。 – arakkots 2010-01-27 14:24:57

回答

0

只是爲了回顧一下,這裏是我如何解釋的問題:

你想要的是與代理最近啓動的活動列表,該活動必須在一開始添加的要求給定日期間隔。

這是做這件事:(。如果問題涉及的LINQ to SQL,可能有一些陷阱我還沒有試過)

// the given date interval 
DateTime startDate = new DateTime(2010, 1, 24); 
DateTime endDate = new DateTime(2010, 10, 25); 

IEnumerable<AgentActivity> agentActivities = 
    ... original list of AgentActivities ... 

IEnumerable<AgentActivity> latestAgentActivitiesByAgent = agentActivities 
    .Where(a => a.StartedAt >= startDate && a.StartedAt < endDate) 
    .GroupBy(a => a.AgentId) 
    .Select(g => g 
     .OrderByDescending(a => a.StartedAt) 
     .First()); 

+0

太棒了!它像一個魅力。非常感謝!我真的很感激幫助.. !! – arakkots 2010-02-02 16:02:34

+0

太棒了!幫助總是很好的。歡迎來到SO。 – 2010-02-02 17:35:32