2010-08-10 28 views
8

tengo muchas relaciones entre el empleado y el grupo. siguiente instrucción linqEliminar duplicados según el valor de la columna-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 }; 

devuelve groupid y employeeid. y el resultado es

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

Necesito eliminar las filas para las que el employeeid repite, p. uno cualquiera de la fila con employeeid = 20
Gracias

+0

¿Qué le haría eliminar la última fila en lugar de la que tiene GrpId = 6? –

+0

bien, necesito el resultado con distintos Employeeids cualquiera se puede eliminar – Tassadaque

Respuesta

26

acuerdo, si no le importa qué empleado se retira, podría intentar algo como:

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

No ha especificado si se trata de en LINQ to SQL, LINQ to Objects o algo más ... No sé cuál sería la traducción SQL de esto. Si usted está tratando con una cantidad relativamente pequeña de datos que siempre se puede forzar esta última parte de estar en proceso:

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

En ese momento, en realidad se podría utilizar MoreLINQ que tiene un práctico método DistinctBy:

var result = query.AsEnumerable() 
        .DistinctBy(x => x.EmployeeId); 
+0

solo por curiosidad! ¿Qué sucede si quiero eliminar una fila específica basada en groupid? – Tassadaque

+1

@ Tassaque: Tendría que dar más detalles sobre lo que quiere, pero podría utilizar 'Except' o' Where'. –

+0

¡Es una gran extensión! – d219

Cuestiones relacionadas