从两个不同的列表创建组



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

我有两个人员名单

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 属性添加到该模型以避免更改域模型。

相关内容

  • 没有找到相关文章

最新更新