Фильтрация и поиск дубликатов в наблюдаемой коллекции WPF - PullRequest
0 голосов
/ 08 сентября 2011

Немного нового, есть ли способ поиска дубликатов в наблюдаемой коллекции?По сути, это мой код:

class Player {
    string FirstName;
    string SurName;
    string Group;
}

private ObservableCollection<MyObj>collection;

По сути, игрок может принадлежать к нескольким группам, поэтому игрок может встречаться несколько раз в коллекции: например, футбол Джон Доу, бейсбол Джон Доу, серфинг Джон Доу.

Чего я хочу добиться, так это отфильтровать его так, чтобы в нем отображался один игрок с разделенными запятыми группами, например: Джон Доу "Футбол, бейсбол, серфинг"

Дополнительная информация: наблюдаемая коллекциязаполняется выполнением вызова wcf (выполнение сохраненного процесса на БД и получение результатов)

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 08 сентября 2011

Группировку можно выполнить, посмотрев на выражение LAMBDA, например

var grouping = MyCollection.GroupBy(x => new { x.FirstName, x.SurName})
                 .Select(group => new {group.Key, group});
0 голосов
/ 08 сентября 2011

Прежде всего, я полагаю, что ваш класс является общедоступным, и все ваши приватные строковые поля (как видно из примера кода) в действительности являются публичными свойствами (скажите, если я ошибаюсь!).Итак, ваш класс выглядит примерно так:

    public class Player
    {
        public string FirstName{get; set;}
        public string SurName{get; set;}
        public string Group{get; set;}
    }

И содержание похоже на:

    public static ObservableCollection<Player> collection = new ObservableCollection<Player>
        { new Player{FirstName ="Alexander", SurName="Davidof", Group = "Football"},
        new Player{FirstName ="Alexander", SurName="Davidof", Group = "Baseball"},
        new Player{FirstName ="Alexander", SurName="Medvedev" , Group = "Karate"},
        new Player{FirstName ="Alexander", SurName="Medvedev", Group = "Polo"}};

Используйте LINQ для группировки ваших записей по именам игроков и String.Join () для объединенияих в строку синглов

        var pl = from player in collection
                 group player by new { First = player.FirstName, Second = player.SurName } into gr
                 select String.Format("{0} {1} : {2}", gr.Key.First, gr.Key.Second, String.Join(",", gr.Select( a=> a.Group)));

Если вы напечатаете этот массив

        pl.ToList().ForEach(a => Console.WriteLine(a));

, вы увидите что-то вроде:

Alexander Davidof : Football,Baseball
Alexander Medvedev : Karate,Polo
0 голосов
/ 08 сентября 2011

Подумайте об этом с помощью Linq-запроса с использованием оператора GroupBy.

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