如何在物业
选择基于独特的价值列表的序列我有一类这样它的名单:如何在物业
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 */);
这些人可能有重复FirstName
和LastName
。我想选择所有FirstName
与LastName
不同的人的子序列。我的意思是我的主键(在关系数据库愿景中)是FirstName + LastName
。
我知道我可以通过迭代列表来做到这一点。但我正在问一个LINQ
解决方案。有没有?我可以通过LINQ
选择指定的子序列吗?请任何想法吗?
创建一个基于FirstName+LastName
键Lookup<TKey, TElement> Class
和(因为你从来没有说过任何关于它的刻申或东西尽快)通过Enumerable.ToLookup Method和Enumerable.Select Method只需要从每一个子集合第一:
var result = persons.ToLookup(p => string.Concat(p.FirstName, p.LastName))
.Select(l => l.First());
这正是我想要的。在此先感谢 –
你只想要独特个人?您可以使用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
感谢帮助,但不是唯一的人。其实我想从只有一个名字和姓氏相同的人中进行选择。我的意思是删除更多的人,并保留每一个。 (我的英文太差了:(对不起) –
+1:我可能比你更喜欢你的查询 – horgh
您可以实现'的IEqualityComparer'的'PersonComparer'类和传递的'PersonComparer'的目的是LINQ'鲜明'方法。 –