2014-02-12 3 views
0

Я думаю, это просто, но я понятия не имею, как это сделать.Создание групп из двух разных списков

У меня есть два списка лиц

List<Person> specificPersons 
List<Person> allPersons 

Я хотел бы создать группы из двух полных списков, как следующее с помощью LINQ.

IEnumerable<IGrouping<string, Person>> personsGroups 

Строкой будет любая пользовательская строка. Я бы использовал это для отображения обоих списков, разделенных заголовком группы в приложении Windows 8.1 Metro ListView, используя привязку CollectionViewSource к IEnumerable.

+0

Какие критерии вы хотите группировать группы людей? – mayabelle

+0

Каждый список должен содержать группу. Возможно, это тот момент, когда я действительно не понимаю, как это работает. Других критериев для создания группы нет, так как каждый список будет группой. – sust86

ответ

1

Вы можете сделать что-то вроде этого:

string headerSpecific = "Specific"; 
string headerAll = "All"; 

var query = 
    specificPersons.GroupBy(_ => headerSpecific) 
    .Union(
    allPersons.GroupBy(_ => headerAll)); 

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

var query = 
    specificPersons.Select(p => new { Header = headerSpecific, p}) 
    .Union(
    allPersons.Select(p => new { Header = headerAll, p})); 
+0

Это похоже на то, что я искал, я проведу это через минуту. Для второго решения с анонимными типами - как бы выглядел возвращаемый тип? – sust86

+0

«IEnumerable» для анонимного типа, содержащего свойство 'Header' типа' string' и свойство 'i' типа' Person' – jnovo

0

Я бы предложил добавить свойство Group к Person, которое вы можете установить с помощью простого цикла в каждом из ваших списков. Тогда вы можете сделать это:

IEnumerable<IGrouping<string, Person>> personsGroups = specificPersons.Concat(allPersons).GroupBy(p => p.Group); 

Обратите внимание, что это не будет иметь смысл, если лицо является областью лица и/или существует в базе данных. Поскольку эти группы предназначены для отображения, используйте модель представления (например, PersonViewModel) и добавьте свойство Group к этой модели, чтобы избежать изменения модели домена.