从两个不同的列表中创建组

时间:2014-02-12 17:33:46

标签: list linq linq-group

我想这很容易,但我不知道如何做到这一点。

我有两个人员名单

List<Person> specificPersons
List<Person> allPersons

我想从两个完整的列表中创建组,如下所示,使用linq。

IEnumerable<IGrouping<string, Person>> personsGroups

该字符串将是任何自定义字符串。我将使用它来显示由Windows 8.1 Metro应用程序ListView中的组标题分隔的两个列表,使用CollectionViewSource绑定到IEnumerable

2 个答案:

答案 0 :(得分: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}));

答案 1 :(得分:0)

我建议将一个Group属性添加到Person,您可以通过每个列表上的简单循环设置它。然后你可以这样做:

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

请注意,如果Person是域实体和/或存在于您的数据库中,这将没有意义。由于这些组用于显示目的,因此请使用视图模型(例如PersonViewModel)并将Group属性添加到该模型,以避免更改域模型。