LINQ: выбор дублирующихся строк в соответствии со значением столбца - PullRequest
5 голосов
/ 10 февраля 2012

Я пытаюсь отобразить те строки в моей DataGrid, которые имеют одинаковое значение столбца.

Например, для лиц, имеющих одинаковую фамилию, я попытался это сделать:

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

Это работает на первый взгляд, так как мой WPF DataGrid содержит строки после этой команды ... В конце концов, он отображает только пустые строки, так как ни один столбец не заполнен значением.

Или я пробовал это с Persons, которыеесть один и тот же город:

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

Есть ли какой-нибудь правильный способ сделать это?

1 Ответ

9 голосов
/ 10 февраля 2012

Вы только выбираете ключ в своем примере:

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

Я предполагаю, что вы пытаетесь выбрать целую строку:

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

Для сравнения имени и фамилии:

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));

РЕДАКТИРОВАТЬ: Для L2E, вы можете (я думаю) использовать анонимные типы:

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

Выше может быть неправильно - не уверен на 100%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...