我想这很容易,但我不知道如何做到这一点。
我有两个人员名单
List<Person> specificPersons
List<Person> allPersons
我想从两个完整的列表中创建组,如下所示,使用linq。
IEnumerable<IGrouping<string, Person>> personsGroups
该字符串将是任何自定义字符串。我将使用它来显示由Windows 8.1 Metro应用程序ListView
中的组标题分隔的两个列表,使用CollectionViewSource
绑定到IEnumerable
。
答案 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属性添加到该模型,以避免更改域模型。