2013-04-01 10 views
6

Quindi io sto usando questo codiceutilizzando LINQ per trovare i duplicati, ma ottenere l'intero record di

var duplicates = mg.GroupBy(i => new { i.addr1, i.addr2 }) 
        .Where(g => g.Count() > 1) 
        .Select(g=>g.Key); 
    GridView1.DataSource = duplicates; 
    GridView1.DataBind(); 

per trovare ed elencare i duplicati in una tabella basata su addr1 e addr2. L'unico problema con questo codice è che mi dà solo la coppia di addr1 e addr2 che sono duplicati quando in realtà voglio visualizzare tutti i campi dei record. (tutti i campi come ID, addr1, addr2, città, stato ...)

Qualche idea?

risposta

13

Per ottenere tutti i valori, è possibile utilizzare ToList() su IGrouping

var duplicates = mg.GroupBy(i => new { i.addr1, i.addr2 }) 
        .Where(g => g.Count() > 1) 
        .Select(g => new {g.Key, Values = g.ToList()}); 
+0

questa è una buona solutio n ... non mi è venuto in mente di fare la Value = g.Tolist() – Nathan

+0

stupenda soluzione.Grazie –

8

Si consiglia di utilizzare First() invece di Key:

var duplicates = mg.GroupBy(i => new { i.addr1, i.addr2 }) 
       .Where(g => g.Count() > 1) 
       .Select(g => g.First()); 

Esso restituisce la prima fila di ogni gruppo duplicati

+0

i è piaciuta anche la tua soluzione ed è semplicissima ... – Nathan

Problemi correlati