2013-04-01 11 views
6

więc używam tego koduużyciu LINQ znaleźć duplikaty ale dostać cały rekord

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

znaleźć i notować duplikatów w tabeli opartej na addr1 i addr2. Jedyny problem z tym kodem polega na tym, że daje mi tylko parę addr1 i addr2, które są duplikatami, gdy chcę wyświetlić wszystkie pola rekordów. (wszystkie pola, takie jak ID, addr1, addr2, miasto, stan ...)

Jakieś pomysły?

Odpowiedz

13

Aby uzyskać wszystkie wartości, można użyć ToList() na 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

To jest naprawdę dobre rozwiązanie n ... nie przyszło mi to do głowy, aby wykonać Value = g.Tolist() – Nathan

+0

wspaniałe rozwiązanie. –

8

Należy użyć First() zamiast Key:

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

Zwraca pierwszy wiersz każdego duplikatu grup

+0

i polubiłem również twoje rozwiązanie i jest proste ... – Nathan