0

我想这很容易,但我不知道如何做到这一点。

我有两个人员列表

List<Person> specificPersons
List<Person> allPersons

我想用 linq 从两个完整列表中创建组,如下所示。

IEnumerable<IGrouping<string, Person>> personsGroups

该字符串将是任何自定义字符串。我将使用它在 Windows 8.1 Metro 应用程序ListView中使用CollectionViewSourceIEnumerable.

4

2 回答 2

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}));
于 2014-02-12T18:08:44.463 回答
0

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

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

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

于 2014-02-12T17:48:44.837 回答