2015-02-25 15 views
5

Ho una lista di tipo MyClassrimuovere i duplicati da elenco basati su più campi o colonne

public class MyClass 
{ 
    public string prop1 {} 
    public int prop2 {} 
    public string prop3 {} 
    public int prop4 {} 
    public string prop5 {} 
    public string prop6 {} 
    .... 
} 

La lista avrà duplicati. Voglio trovare e rimuovere elementi da questo elenco in cui prop1, prop2 e prop3 sono duplicati. Non importa se le altre proprietà sono duplicate

Questo è quello che ho provato che non funziona.

List<MyClass> noDups = myClassList.GroupBy(d => new {d.prop1,d.prop2,d.prop3}).Where(g => g.Count() > 1).Select(g=> g.Key); 

Non voglio utilizzare strumenti di terze parti per questo. Solo linq puro.

+1

che cosa si intende per _non working_? Hai ricevuto un'eccezione o un messaggio di errore? Cosa ottieni di conseguenza? –

+0

Ricevo un'eccezione Impossibile convertire implicitamente il tipo 'System.Collections.Generic.IEnumerable ' in 'System.Collections.Generic.List '. Esiste una conversione esplicita (ti manca un cast?) – user20358

+0

quando inserisci una ToList alla fine di Select (g => g.Key) ... Ottengo "Impossibile convertire implicitamente il tipo 'System.Collections.Generic.List < AnonymousType # 1> 'a' System.Collections.Generic.List ' – user20358

risposta

13

Ciò restituirà un elemento per ogni "tipo" (come un Distinct) (quindi se avete A, A, B, C tornerà A, B, C)

List<MyClass> noDups = myClassList.GroupBy(d => new {d.prop1,d.prop2,d.prop3}) 
            .Select(d => d.First()) 
            .ToList(); 

Se si desidera solo gli elementi che non hanno un duplicato (quindi se avete a, a, B, C tornerà B, C):

List<MyClass> noDups = myClassList.GroupBy(d => new {d.prop1,d.prop2,d.prop3}) 
            .Where(d => d.Count() == 1) 
            .Select(d => d.First()) 
            .ToList(); 
+0

e se devi fare la stessa cosa con un 'datatable' invece di' MyClass'? – Jogi

+0

@RehanKhan Domanda completamente diversa ... Poni una nuova domanda a riguardo, più facile. – xanatos

+0

se tu sono interessati, [qui] (http://stackoverflow.com/questions/37154701/distinct-on-multiple-columns-in-datatable?noredirect=1#comment61846505_37154701) è quella domanda. – Jogi

Problemi correlati