2010-08-10 10 views
8

Ho molte più relazioni tra dipendente e gruppo. seguente istruzione linqRimuovi duplicati in base al valore della colonna-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 }; 

restituisce groupid e l'employeeid. e il risultato è

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

Ho bisogno di rimuovere le righe per le quali il dipendente sta ripetendo ad es. una delle fila con EmployeeID = 20
Grazie

+0

Cosa farebbe rimuovere l'ultima riga anziché quella con GrpId = 6? –

+0

ok, ho bisogno di risultati con Employeeids distinti, chiunque può essere rimosso – Tassadaque

risposta

26

Va bene, se non si cura che dipendente viene rimosso, si potrebbe provare qualcosa di simile:

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

Non è stato specificato se si tratti di in LINQ a SQL, LINQ a oggetti o qualcos'altro ... Non so quale sarebbe la traduzione SQL di questo. Se hai a che fare con una quantità relativamente piccola di dati che si può sempre forzare l'ultimo bit di essere in-process:

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

A quel punto si potrebbe effettivamente utilizzare MoreLINQ che ha una portata di mano DistinctBy metodo:

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

solo per curiosità! cosa succede se voglio rimuovere una riga specifica basata su groupid. – Tassadaque

+1

@Tassadaque: Dovresti fornire maggiori dettagli su ciò che desideri, ma potresti potenzialmente usare "Eccetto" o "Dove". –

+0

Questa è una grande estensione! – d219

Problemi correlati