Дублирование данных в DataGrid. Проблема с запросом LINQ - PullRequest
1 голос
/ 08 июня 2011

У меня такой запрос, но он выдает неправильный вывод. У меня есть две коллекции данных abcdata && xyzdata. каждая коллекция состоит из анонимных объектов, которые имеют свойства Group, Name. Что мне нужно сделать, это получить результирующую коллекцию с объединенными группами из abcdata и xyzdata соответственно.

if(this.AbcDataGrid.ItemsSource != null && this.XyzDataGrid.ItemsSource != null)
{
       var abcdata = ((IEnumerable<dynamic>)this.AbcDataGrid.ItemsSource).ToList().OrderByDescending(x => x.Id);
       var xyzdata = ((IEnumerable<dynamic>)this.XyzDataGrid.ItemsSource).ToList().OrderByDescending(x => x.Id);

       var result = from i1 in abcdata
                    from i2 in xyzdata
                    select new
                    {
                        Name  = i1.Name,
                        Group = i1.Group.ToString() + i2.Group.ToString()
                    };

        this.ResultGrid.ItemsSource = result.ToList();
    }

Пока я ожидал, что DataGrid заполнится списком новых объектов {Name, Group}, у меня очень странный результат: enter image description here

1 Ответ

5 голосов
/ 08 июня 2011

Я считаю, что вы пытаетесь объединить обе коллекции данных.Запрос linq, который вы выполняете, возвращает правильные результаты, которые вы запрашиваете: для каждого элемента abcdata и для каждого элемента xyzdata возвращайте объект, который вы строите.Итак, если abcdata имеет 3 элемента, а xyzdata имеет 5 элементов, результат будет иметь 15 элементов.

Если вы хотите: для каждого элемента abcdata выберите элементы xyzdata с одинаковыми именами и объедините группы., что вам нужно, это Регистрация.

Что-то вроде

var result = from i1 in abcdata
                join i2 in xyzdata on i1.Name equals i2.Name
                select new
                {
                    Name  = i1.Name,
                    Group = i1.Group.ToString() + i2.Group.ToString()
                };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...