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
属性的匿名类型,返回的类型是什么样的