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

List 从两个不同的列表中创建组,list,linq,linq-group,List,Linq,Linq Group,我想这很简单,但我不知道怎么做 我有两张名单 List<Person> specificPersons List<Person> allPersons 列出具体人员 列出所有人 我想用两个完整的列表创建组,如下所示 IEnumerable<IGrouping<string, Person>> personsGroups IEnumerable PersonGroup 该字符串将是任何自定义字符串。我将使用它来显示Windows 8.1 Me

我想这很简单,但我不知道怎么做

我有两张名单

List<Person> specificPersons
List<Person> allPersons
列出具体人员
列出所有人
我想用两个完整的列表创建组,如下所示

IEnumerable<IGrouping<string, Person>> personsGroups
IEnumerable PersonGroup

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

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

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

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

您可以执行以下操作:

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}));

您希望按什么标准对人员组进行分组?每个列表应生成一个组。也许这就是我不太明白它是如何工作的。没有其他标准来创建组,因为每个列表都将是一个组。这似乎是我一直在寻找的,我将在一分钟内对此进行测试。对于匿名类型的第二个解决方案-返回的类型是什么样的?对于包含
类型
字符串
属性和
类型
i
属性的匿名类型,返回的类型是什么样的