前言
本篇博客可以用“简单粗暴”来形容,嗯对,就是简单粗暴。小编不久前做的两个项目,都实打实的接触了大数据操作。一个是批量导入,一个是从数据库往外查询,都涉及到了数据去重。Excel批量导入的去重,在《Excel批量导入如何做数据去重》这篇博客中已经介绍过了,下面就介绍下从数据库往外查询的数据去重。
背景
ITOO云平台,用户登录时要判断该用户能看到的系统或者界面,下面简称用户资源。一个用户有不同身份,不同身份拥有不同资源,那么当用户登录的时候,这些资源应该怎么处理呢?小编是这么处理的,不同的身份有不同的资源,这些资源可能有重叠,也可能不一样,所以这个用户登录时,就加载该用户所有身份,查出所有身份拥有的资源,如果有重复就去重,有不同的资源就一起加载。
实现方式
因为当前用的都是泛型集合,所以就直接用泛型集合来去重了。
1、List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法。
class User:IEquatable<User>//继承IEquatable接口,实现Equals方法。List就可以使用Distinct去重
{
public string name { get; set; }
string address;
public User(string _name, string _address)
{
name = _name;
address = _address;
}
public override string ToString()
{
return string.Format("name:{0},\taddress:{1}", name, address);
}
public bool Equals(User other)
{
return this.name == other.name;
}
public override int GetHashCode()
{
return name.GetHashCode();
}
}
}
List<User> nonDuplicateList1 = users.Distinct().ToList();
2、用Lambda表达式去重
List<User> nonDuplicateList2 = users.Where((x,i)=>users.FindIndex(z=>z.name == x.name) == i).ToList()
3、用循环方式去重
List<User> nonDuplicateList3 = new List<User>();//通过循环方式去重
foreach(User user in users)
{
if(nonDuplicateList3.Exists(x=>x.name==user.name) == false)
{
nonDuplicateList3.Add(user);
}
}
总结
作为一个后台开发人员,与数据库打交道的同时是离不开数据去重的。在做这个判断的时候,还涉及到一个问题,就是我想根据该用户登录的时间和地点等不同,猜测他有哪些身份,从而加载相应的资源,而不是将他所拥有的资源全部加载过来,但是怎么知道当前用户想以哪个身份登录呢?这也算人能做的了,但是计算机做不了的事情吧。希望各路大牛,给出一些做过的权限控制方面的经验,指点一下我这个菜鸟。