2015-09-14 5 views
-3

Привет Ниже представлен набор записей, который у меня есть.Найти последнюю запись в списке сотрудников

------------------ 
Emp#  Date 
------------------ 
emp1  09/12/2015 
emp1  09/13/2015 
emp2  09/11/2015 
emp3  09/10/2015 
emp4  09/14/2015 
emp3  09/11/2015 
emp2  09/14/2015 

Мне нужна инструкция linq, с выходом, как показано ниже.

------------------ 
Emp#  Date 
------------------ 
emp1  09/13/2015 
emp2  09/14/2015 
emp3  09/11/2015 
emp4  09/14/2015 

В принципе, получите последнюю единственную запись на сотрудника. Мой вход - это идентификатор сотрудника как список.

Я пробовал все комбинации, но мне ничего не помогает. Пожалуйста, помогите мне, поскольку у меня более 100 тыс. Записей и 5 тыс. Сотрудников с другой датой.

Мне нужно получить все с одним вызовом DB.

+0

вар punchedJobs = (GetAllAsQueryable() .где ( пробивные => employeeIDs.Contains (удар .Employee.ID)) ); punchedJobs; после этого я повторяю tru для цикла – user1581317

ответ

3

Вам нужно GroupBy: -

var result = list.GroupBy(x => x.EmpId) 
       .Select(x => new 
           { 
            EmpId = x.Key, 
            Date = x.OrderByDescending(z => z.Date).FirstOrDefault().Date 
           }; 

Или, в синтаксисе запроса:

from emp in employees 
group emp by emp.Id into g 
let date = g.Select(e => e.Date).OrderByDescending().FirstOrDefault(); 
select new {id = g.Key, date}; 
+0

в основном я делаю из DB GetAllAsQueryable(). поэтому, если бы я сделал группу, то ее больше записей. Также его smaple, где я упоминаю emp # и дату, но на самом деле emp table имеет более 20 полей. Тогда как это сделать лучше? – user1581317

+0

Если вам нужны записи по тем же критериям, то есть самая последняя запись для каждого сотрудника, то, как предложила @dcastro, в переменной 'date' у вас будет первый объект в каждой группе, вы можете использовать его для доступа к другим свойствам, таким как это : 'select new {id = g.Key, date = date.date, prop1 = date.prop1, ... и т. д.};' –

Смежные вопросы