0

我有一个班级和一个这样的清单:

public class Person {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Birthday { get; set; }
}

// and my list is:
var persons = new List<Person>();
persons.add(/* add for example 20 person here */);

这些人可能有重复的FirstNameLastName。我想选择所有FirstName与不同的人的子序列LastName。我的意思是我的主键(在关系数据库中)是FirstName + LastName.

我知道我可以通过迭代列表来做到这一点。但我在问一个LINQ解决方案。有吗?我可以选择指定的子序列LINQ吗?请问有什么想法吗?

4

2 回答 2

1

你只想要独特的人吗?您可以使用Enumerable.GroupBy,然后计算每个组:

var uniquePersons = persons 
                   .GroupBy(p => new { p.FirstName, p.LastName })
                   .Where(g => g.Count() == 1)
                   .Select(g => g.First());

这是一个演示:http: //ideone.com/nsbyyI

于 2012-11-28T08:40:50.853 回答
1

通过Enumerable.ToLookup 方法Enumerable.Select 方法创建一个Lookup<TKey, TElement> Class基于FirstName+LastName键并仅从每个子集合中获取第一个(只要您从未说过任何关于它的 rder 或其他内容):

var result = persons.ToLookup(p => string.Concat(p.FirstName, p.LastName))
                    .Select(l => l.First());
于 2012-11-28T08:31:02.683 回答