Удалить дубликат на основе значения столбца-linq - PullRequest
10 голосов
/ 10 августа 2010

У меня много-много отношений между сотрудником и группой. следующее заявление linq

int[] GroupIDs = {6,7};


var result = from g in umGroups
    join empGroup in umEmployeeGroups on g.GroupID equals empGroup.GroupID
    where  GroupIDs.Contains(g.GroupID)                     
    select new {  GrpId = g.GroupID,EmployeeID = empGroup.EmployeeID };

возвращает идентификатор группы и идентификатор сотрудника. и результат

GrpId  | EmployeeID
6      |   18
6      |   20  
7      |   19
7      |   20

Мне нужно удалить строки, для которых повторяется сотрудник, например. любой из подряд с employeeid = 20
Спасибо

1 Ответ

30 голосов
/ 10 августа 2010

Хорошо, если вам все равно, какой сотрудник будет удален, вы можете попробовать что-то вроде:

var result = query.GroupBy(x => x.EmployeeId)
                  .Select(group => group.First());

Вы не указали, находится ли это в LINQ to SQL, LINQ to Objects или что-то еще... Я не знаю, что это будет за перевод на SQL.Если вы имеете дело с относительно небольшим объемом данных, вы всегда можете принудительно запустить этот последний бит:

var result = query.AsEnumerable()
                  .GroupBy(x => x.EmployeeId)
                  .Select(group => group.First());

В этот момент вы можете использовать MoreLINQ , который имеетудобный DistinctBy метод:

var result = query.AsEnumerable()
                  .DistinctBy(x => x.EmployeeId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...