如何在物业

问题描述:

选择基于独特的价值列表的序列我有一类这样它的名单:如何在物业

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。我想选择所有FirstNameLastName不同的人的子序列。我的意思是我的主键(在关系数据库愿景中)是FirstName + LastName

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

+0

您可以实现'的IEqualityComparer '的'PersonComparer'类和传递的'PersonComparer'的目的是LINQ'鲜明'方法。 –

创建一个基于FirstName+LastNameLookup<TKey, TElement> Class和(因为你从来没有说过任何关于它的刻申或东西尽快)通过Enumerable.ToLookup MethodEnumerable.Select Method只需要从每一个子集合第一:

var result = persons.ToLookup(p => string.Concat(p.FirstName, p.LastName)) 
        .Select(l => l.First()); 
+0

这正是我想要的。在此先感谢 –

你只想要独特个人?您可以使用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

+0

感谢帮助,但不是唯一的人。其实我想从只有一个名字和姓氏相同的人中进行选择。我的意思是删除更多的人,并保留每一个。 (我的英文太差了:(对不起) –

+0

+1:我可能比你更喜欢你的查询 – horgh