Выровнять коллекцию коллекций для отображения в сетке данных WPF - PullRequest
0 голосов
/ 12 ноября 2010

Я работаю со сложенными заголовками в сетке данных Telerik WPF. Способ, которым я подходил к проблеме, состоял в том, чтобы создать плоское представление моих данных. Например.

будет отображаться так:

Персона А | Человек Б | Человек С
Месяц | Заработок | Заработок | Заработок

У меня есть коллекция людей, содержащая их списки месяцев и заработков.

Поэтому я хочу привести каждого человека на один уровень или, проще говоря, я хочу создать единый список со всеми месяцами и доходами, доступными по горизонтали. Как лучше всего подойти к этому?

Ответы [ 2 ]

2 голосов
/ 12 ноября 2010

Как уже говорили другие, сложно быть конкретным, не видя больше вашего кода. Но, как правило, уплощение коллекций - это то, для чего создан метод расширения SelectMany () LINQ .

2 голосов
/ 12 ноября 2010

Я не уверен, хотите ли вы, чтобы список, в котором несколько раз были люди, или просто список с доходами. Я даю вам пару решений, основанных на различных требованиях и предположениях, которые я должен был сделать относительно структуры вашего класса.

Сначала предположим, что вам нужен список, в котором у каждого элемента есть человек, месяц и заработок, и у вас есть структура класса человек с двумя содержащимися списками (один для заработков и один для месяцев, которые синхронизируются по индексам может использовать вариант следующего запроса LINQ для создания перечисления

var flatList = from person in persons
                from month in person.Month.Select((month, index) => new {Month = month, Index = index})
                from amount in person.Amount.Select((amount, index) => new { Amount = amount, Index = index })
                where month.Index == amount.Index
                select new { Name = person.Name, Month = month.Month, Amount = amount.Amount};

Если бы вместо этого вы хотели, чтобы месяц и суммы имели ту же структуру, вы бы написали следующее:

var flatList = from person in persons
                from month in person.Month.Select((month, index) => new {Month = month, Index = index})
                from amount in person.Amount.Select((amount, index) => new { Amount = amount, Index = index })
                where month.Index == amount.Index
                select new { Month = month.Month, Amount = amount.Amount};

Если бы вместо этого у вас был список людей, у которого есть объект заработка, соответствующий месяцу, и сумма, которую вы могли бы написать примерно так:

var flatList = from person in persons
                       from earning in person.Earnings
                       select new { Pers = person.Name, Month = earning.Month, Amount = earning.Amount };

Или еще раз, если вы не хотите, чтобы человек, которого вы бы использовали:

var flatList = from person in persons
                           from earning in person.Earnings
                           select new {Month = earning.Month, Amount = earning.Amount };

Я надеюсь, что один из них - то, что вы искали, иначе, пожалуйста, уточните ваш вопрос, потому что я неправильно понял.

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