我想这很简单,但我不知道该怎么做。
我有两个人员名单
List<Person> specificPersons
List<Person> allPersons
我想从两个完整列表中创建组,如下所示使用 linq。
IEnumerable<IGrouping<string, Person>> personsGroups
该字符串将是任何自定义字符串。我将使用它来显示两个列表,这两个列表由 Windows 8.1 Metro 应用程序中的组标题分隔,ListView
使用CollectionViewSource
绑定到IEnumerable
。
你可以做这样的事情:
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}));
我建议向 Person 添加一个 Group 属性,您可以通过每个列表上的简单循环来设置该属性。 然后你可以这样做:
IEnumerable<IGrouping<string, Person>> personsGroups = specificPersons.Concat(allPersons).GroupBy(p => p.Group);
请注意,如果 Person 是域实体和/或存在于您的数据库中,则这没有意义。由于这些组用于显示目的,因此请使用视图模型(例如 PersonViewModel)并将 Group 属性添加到该模型以避免更改域模型。