首页 新闻 会员 周边 捐助

求助C# lambda表达式问题

0
悬赏园豆:5 [已解决问题] 解决于 2016-03-21 08:47

有个集合List<student> students,在用lambda表达式筛选后,还想将结果变为List<student>,如何做?

比如students.select(e => e.name).distinct() as List<student>;?

代码小兵的成长的主页 代码小兵的成长 | 菜鸟二级 | 园豆:303
提问于:2016-03-18 14:55
< >
分享
最佳答案
0
student. DistinctBy(e => e.name);

 

收获园豆:3
jackccc | 小虾三级 |园豆:1341 | 2016-03-18 15:02

 VS2010没有这个方法,哭了啊

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2016-03-18 15:15

@代码小兵的成长: 

var result = student.GroupBy(e => e.name).Select(x => x.First());
jackccc | 园豆:1341 (小虾三级) | 2016-03-18 16:38

@jackccc: 多谢你这个最好用

代码小兵的成长 | 园豆:303 (菜鸟二级) | 2016-03-21 08:46
其他回答(5)
0

ToList()

jello chen | 园豆:7336 (大侠五级) | 2016-03-18 15:22
0

 

ToList()

会长 | 园豆:12463 (专家六级) | 2016-03-18 16:11
0

tolist()

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-03-18 17:52
1

你的描述不是很准确,应该是希望按照某个字段来求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())

 

收获园豆:2
天方 | 园豆:5432 (大侠五级) | 2016-03-19 09:15

大神你的答案是最给力的,不过在项目中实在不好多添加类,还是楼上的最舒服。不过你的代码我还是会自己下面练习试试,多谢了

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2016-03-21 08:47
0

.ToList();

多罗贝勒 | 园豆:16 (初学一级) | 2016-03-20 09:34

多罗贝勒 

@小眼睛老鼠 

@会长 

@jello chen

ToList()以后,返回的就不是原有的数据类型了,所以不对啊

支持(0) 反对(0) 代码小兵的成长 | 园豆:303 (菜鸟二级) | 2016-03-21 08:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册