Объединяет с несколькими полями данные таблицы GroupBy в запросе / методе LINQ - PullRequest
1 голос
/ 27 января 2010

Мне нужно решить, как написать следующий запрос SQL, используя синтаксис запроса или метода LINQ. (Редактировать: вернуть список последних агентских действий для всех агентов).

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 голосов
/ 31 января 2010

Напомню, вот как я интерпретирую вопрос:

Вам нужен список с самой последней запущенной операцией для агента с дополнительным требованием, чтобы операция была запущена в течение заданного интервала дат.

Это один из способов сделать это:

// 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, возможно, есть некоторые ошибки. Я не пробовал.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...