C# List<entity> 去重(lambda递归方式去重)

1.实体类

public class Student
    {
        public int Id { get; set; }

        public string Head { get; set; }
    }

2.数据源

List list = new List()
            {
                new Student
                {
                    Head="11",
                    Id=1
                },
                 new Student
                {
                    Head="12",
                    Id=2
                },
                  new Student
                {
                    Head="13",
                    Id=3
                },
                   new Student
                {
                    Head="14",
                    Id=4
                },
                    new Student
                {
                    Head="15",
                    Id=1
                },
                     new Student
                {
                    Head="16",
                    Id=2
                },
            };

3.去重

Func, List> func = null;

            list = (func = (List par) =>
            {
                var ids = par.GroupBy(t => t.Id).Where(t => t.Count() > 1).Select(t => t.Key).ToList();

                if (ids == null || ids.Count < 1)
                    return par;

                ids.ForEach(t =>
                {
                    par.Remove(par.FirstOrDefault(p => p.Id == t));
                });

                return func(par);
            }).Invoke(list);

4.可以直接使用新方法DistinctBy()去重,也可以实现接口IEqualityComparer,重写Equals 和hashCode(可以看看我另外一篇文章通用去重)

你可能感兴趣的:(c#)