2013-09-23 18 views
5

Tüm kayıtları içeren ve aynı adla birlikte bir veri ızgarası oluşturmak istiyorum.Varlık Çerçevesi ile SQL tablosundaki tüm yinelenen kayıtları bul

Shop 
ID name   adress   city 
----------------------------------------- 
1 name1   adress 1   city1 
2 name 2  adress2   city2 
3 name 2   
4 name 2       city2 
5 name 3   
6 name 4  adress4   city4 
7 name 4  adress4   city4 

ve benim datagrid içermelidir:

Bu tablo var

2 name 2  adress2   city2 
3 name 2   
4 name 2       city2 
6 name 4  adress4   city4 
7 name 4  adress4   city4 

ama nasıl bu sorguyu

cevap

12

Eğer Varlık Çerçevesini kullanıyorum LINQ'yi de kullandığınızı varsayalım.

Bu durumda, bu şekilde deneyin: Linqpad example

// DÜZENLEME:

İsterseniz çıktı şu şekilde görünecektir basit örnekte

var duplicates = Shop.GroupBy(i => i.Name) 
        .Where(x => x.Count() > 1) 
        .Select(val => val.Key); 

foreach(var item in duplicates) 
{ 
    //process 
} 

Birden çok sütunla gruplamak için şu sözdizimini kullanabilirsiniz:

var query = (from sh in Shop 
    group sh by new {sh.Name, sh.Address, sh.City} into grp 
    select new 
    { 
     name = grp.Key.Name, 
     address = grp.Key.Address, 
     city = grp.Key.City 
    }).ToList() 
     .GroupBy(q => q.name) 
     .Where (q => q.Count() >1) 
     .Dump(); 

Bu aşağıdaki neden olur:

second result

// EDIT2: bazen aptal sınırda değilim. KISS-prensibine göre :

var query = Shop.GroupBy (s => s.Name).Where (s => s.Count() > 1).Dump(); 
+0

Böyle yaparsam, yinelenen kayıtlarla yalnızca bir satırım var. Ama tüm yinelenen kayıtlarımı izlemek istiyorum –

+0

silmek istediğim kayıtları seçmek için sadece ilk adıma göre gruplar ve sadece "resmim" örneğinde gösterildiği gibi TÜM kopyaları verir. Bize biraz kod verebilirseniz, belki bir hata bulabiliriz. – Marco

+0

Hata yok. istediğim şey değil. Örneğimi okuyorsanız, sonuçta yinelenen satırların ayrıntılarını görmek istediğimi görebilirsiniz. Sizler için: {3,3,4,4,6,6,7,7 ...} –

2

bu şekilde deneyin oluşturmak için hiçbir fikrim yok:

select name, adress, city 
from tab 
where name in (select name 
       from tab 
       group by name 
       having count(name) >1) 
1
var groupedByName = from shop in Shops 
        group shop by new shop.Name into grp 
        where grp.Count() > 1 
        select grp 

işi yapmalıdır. Sonuç, Grubun Anahtarının Dükkanın Ad özelliği olduğu, Ad tarafından gruplandırılmış bir değerler kümesiyle (Mağazalar) bir Gruptur.

Üzgünüz, ama yorum eklemek için çok uzun oldu.

+0

Bu kopyaları içermiyor, bir 'where clause' – Marco

+0

eklemeniz gerekiyor, nerede yanıldığını unuttum, teşekkürler – ilmatte

İlgili konular