LINQ To SQL - получить последние записи, которые соответствуют предложению where - PullRequest
3 голосов
/ 22 июля 2010

Учитывая что-то вроде следующего (просто скомбинировано в качестве примера)

Employee ID | Time In       | Position | Shift Length  
1           | April 1 08:00 | Manager  | 8  
0           | April 1 08:00 | Maint    | 8  
1           | April 2 08:00 | Manager  | 8  
2           | April 1 08:00 | Clerk    | 4  
1           | April 3 08:00 | Manager  | 8  
0           | April 2 12:00 | Maint    | 1  
0           | April 3 12:00 | Maint    | 4  

Если задана конкретная дата, мне нужно иметь возможность получить самую последнюю запись для каждого идентификатора сотрудника, который был до этогодата (только на основе времени в)

Так, если бы указанная дата была, например,

3 апреля 5: 00

Я бы ожидал, что следующие строки вернутся

Employee ID | Time In       | Position | Shift Length  
1           | April 2 08:00 | Manager  | 8  
2           | April 1 08:00 | Clerk    | 4  
0           | April 2 14:00 | Maint    | 1  

Мне нужно возвращать всю запись для каждого совпадения.

Мне также необходимо убедиться, что записи сравниваются с указанной датой, прежде чем они будут отфильтрованы по идентификатору сотрудника.Я не хочу получать последние записи по каждому сотруднику, а затем проверять их по дате.

Спасибо за помощь.

1 Ответ

7 голосов
/ 22 июля 2010

Звучит так, будто вы хотите что-то вроде:

var query = from row in context.Whatever
            where row.TimeIn < specifiedDate
            group row by row.EmployeeID into g
            select g.OrderByDescending(r => r.TimeIn).First();

Итак, шаги:

  • Отфильтруйте все, что нам не нужно
  • Группировка по сотрудникам
  • В каждой группе упорядочите по дате в порядке убывания (т. Е. Сначала первым) и возьмите первую запись

(Альтернативой может быть использование g.OrderBy(r => r.TimeIn).Last() - я не знаю, как это повлияет на сгенерированный SQL.)

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