2012-02-10 11 views
5

'a göre yinelenen satırları seçiyorum Aynı sütun değerini paylaşan DataGrid'imde bu satırları görüntülemeye çalışıyorum.LINQ: Sütun Değeri

Örneğin, aynı Soyadı sahip Kişilerin için, bu çalıştı:

benim WPF DataGrid bu komutun ardından satırlar içeriyor gibi bu görünüşte çalışıyor
dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => grp.Key); 

... Sonunda sadece boş satırları görüntüler Hiçbir sütun bir değerle doldurulmadığından.

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.City).Where(grp => grp.Count() > 1).Select(grp => grp.Key).Select(a => a); 

Bunu yapmak için herhangi bir uygun bir yolu var mı: Aynı City'yi

Ya Kişiler ile bu çalıştı?

+0

Sorulan sorudan emin değilim. Açıklığa kavuşturmak için, ilk kod örneği çalışır, ancak ikinci örneklemez? – Bryan

+0

Her ikisi de işe yaramaz, çünkü ilk yalnızca boş satırları döndürür (ancak en azından bazılarını döndürür ...) ve ikincisi hiçbir şey döndürmez – SeToY

+1

Veritabanınızdaki SurName için boş değerlere sahip birden fazla satırınız olduğu anlamına gelir ? Hem çalışıyor hem de beklediğiniz verileri geri getirmiyor gibi görünüyor. 'Adres' ve 'Kişi' için sınıf tanımlarını görmeye yardımcı olur – Bryan

cevap

9

Yalnızca örnekte anahtar seçiyoruz:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).Select(grp => **grp.Key**); 

Sana bütün satırı seçmek için yapmanız çalışıyoruz varsayalım Ne:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => a.SurName).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

ve soyadını karşılaştırmak için:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new Tuple<String, String>(a.ForeName, a.SurName)).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

DÜZENLEME: L2E için, (bence) anonim türlerini kullanabilirsiniz:

dataGrid.ItemsSource = _dataContext.Addresses.GroupBy(a => new { a.ForeName, a.SurName }).Where(grp => grp.Count() > 1).SelectMany(grp => grp.Select(r=>r)); 

Yukarıdakiler yanlış olabilir -% 100 emin değil.

+0

Teşekkür ederim, bunun işe yaradığını düşünüyorum ... Sadece SurNames'i değil, aynı zamanda ForeNames'i de karşılaştırmak için sorguyu nasıl değiştirmeliyim? .GroupBy (a => a.ForeName, a.SurName) çalışmıyor. – SeToY

+0

"İlk ad ve soyadıyla eşleşen satırları göster"? Düzenlememe bak. –

+0

Evet, FirstName ve LastName öğelerinin eşit olduğu satırlar – SeToY