在LINQ查询/方法中连接Group By表数据上的多个字段

时间:2010-01-27 14:11:12

标签: linq field join

我必须弄清楚如何使用LINQ查询或方法语法编写以下SQL查询。 (编辑:这是为所有代理返回最新的AgentActivities列表。)

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])

1 个答案:

答案 0 :(得分:0)

回顾一下,这就是我如何解释这个问题:

您想要的是包含代理最近启动的活动的列表,并且要求必须在给定的日期间隔内启动活动。

这是一种方法:

// 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());

(如果问题涉及LINQ to SQL,可能会有一些问题。我没有尝试过。)