博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linq下的distinct()比SQLServer下的distinct更强大,更自由,呵呵
阅读量:6824 次
发布时间:2019-06-26

本文共 2710 字,大约阅读时间需要 9 分钟。

大家好,今天调点时间来说一下LINQ里的distinct(),以及解决过滤重复记录的方法

准备数据:先来个实体类,自己为它赋值,然后用 linq to object对象它进行distinct的操作

public abstract class BaseEntity   {       public BaseEntity() : this(0) { }       public BaseEntity(long id)       {           ID = id;       }       public long ID { get; private set; }   }   class People : BaseEntity   {       public string UserName { get; set; }       public string Email { get; set; }       public int Age { get; set; }   }
#region linq to object
List
peopleList = new List
(); peopleList.Add(new People { UserName = "zzl", Email = "1" }); peopleList.Add(new People { UserName = "zzl", Email = "1" }); peopleList.Add(new People { UserName = "lr", Email = "2" }); peopleList.Add(new People { UserName = "lr", Email = "2" }); Console.WriteLine("用扩展方法可以过滤某个字段,然后把当前实体输出"); peopleList.DistinctBy(i => new { i.UserName }).ToList().ForEach(i => Console.WriteLine(i.UserName + i.Email)); Console.WriteLine("默认方法,集合中有多个字段,当所有字段发生重复时,distinct生效,这与SQLSERVER相同"); peopleList.Select(i => new { UserName = i.UserName, Email = i.Email }).OrderByDescending(k => k.Email).Distinct().ToList().ForEach(i => Console.WriteLine(i.UserName + i.Email)); Console.WriteLine("集合中有一个字段,将这个字段重复的过滤,并输出这个字段"); peopleList.Select(i => new { i.UserName }).Distinct().ToList().ForEach(i => Console.WriteLine(i.UserName)); #endregion

下面我们来看一下linq to sql的测试情况,看代码:

#region 对linq to sql进行Ddistinct()
DataClasses1DataContext db = new DataClasses1DataContext();            Console.WriteLine("对单个字段可以实现");            db.Customer.Select(i => new { i.Name }).Distinct().ToList().ForEach(i => Console.WriteLine(i.Name));            Console.WriteLine("直接对原-数据集中多个字段进行过滤");            db.Customer.ToList().Select(i => new { Name = i.Name, Email = i.Email }).Distinct().ToList().ForEach(i =>            {                Console.WriteLine(i.Name + i.Email);            });            Console.WriteLine("将linq to sql对象赋给别一个实体对象时出现了不能过滤的问题");            List
entity = new List
(); db.Customer.ToList().Select(i => new { Name = i.Name, Email = i.Email }).ToList().ForEach(i => { entity.Add(new Customermodel { Name = i.Name, Email = i.Email }); }); entity.Distinct().ToList().ForEach(i => Console.WriteLine(i.Name + i.Email)); Console.WriteLine("使用distinct扩展方法进行过滤,没有问题"); entity.DistinctBy(j => new { j.Name }).ToList().ForEach(i => Console.WriteLine(i.Name + i.Email)); #endregion测试结果:
 
 

最后,贡献出DistinctBy这个IEnumerable的扩展方法:

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
【疑】checkpoint防火墙双链路负载均衡无法配置权重问题
查看>>
Spring常用注解汇总
查看>>
angular工具-stackblitz
查看>>
Requests 模块
查看>>
关于java的跨平台特性
查看>>
之前写了http解析高德地图时,json转对象搞了半天 , 今天同事用GSON把json转对象,一句代码就解决了,代码如下...
查看>>
HDU-1047(DP-二进制状态压缩)
查看>>
Careercup | Chapter 3
查看>>
myeclipse2014如何添加源码反编译工具插件
查看>>
sqlmap的简要使用方法
查看>>
在Lua中使用数字的时候有个坑
查看>>
热血高校
查看>>
六、其他javascript秘籍
查看>>
EXPLAIN说明
查看>>
c语言课程设计
查看>>
vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全
查看>>
BZOJ 4820 [SDOI2017] 硬币游戏
查看>>
boost中bind的使用
查看>>
PXC搭建
查看>>
tp 内置压缩文件zip
查看>>