有个集合List<student> students,在用lambda表达式筛选后,还想将结果变为List<student>,如何做?
比如students.select(e => e.name).distinct() as List<student>;?
student. DistinctBy(e => e.name);
VS2010没有这个方法,哭了啊
@代码小兵的成长:
var result = student.GroupBy(e => e.name).Select(x => x.First());
@jackccc: 多谢你这个最好用
ToList()
ToList()
tolist()
你的描述不是很准确,应该是希望按照某个字段来求Distinct吧,一种方式是按照一楼的方式的方式先Group再取首元素,较为正统的做法是用Distinct的第二种重载形式:
IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer);
先实现一个Student的EqualityComparer
class StudentEqualityComparer : IEqualityComparer<Student> { public bool Equals(Student x, Student y) { return x.Name == y.Name; } public int GetHashCode(Student obj) { return obj.Name == null ? -1 : obj.Name.GetHashCode(); } }
然后用它来比较就可以了
students.Distinct(new StudentEqualityComparer())
大神你的答案是最给力的,不过在项目中实在不好多添加类,还是楼上的最舒服。不过你的代码我还是会自己下面练习试试,多谢了