LINQ里的Distinct()
IQueryable 继承自IEnumerable
先举例:
#region linq to object 
         List<People> peopleList = new List<People>();
            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
该扩展方法贴出:
public static class EnumerableExtensions
    {
       public static IEnumerable<TSource> DistinctBy<TSource, Tkey>(this IEnumerable<TSource> source, Func<TSource, Tkey> keySelector)
       {
           HashSet<Tkey> hashSet = new HashSet<Tkey>();
           foreach (TSource item in source)
           {
               if (hashSet.Add(keySelector(item)))
               {
                   yield return item;
               }
           }
       }
    }
LINQ里的Distinct()的更多相关文章
- 重写类的Equals以及重写Linq下的Distinct方法
		当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ... 
- Linq 中的distinct去重
		Linq的Distinct和T-Sql的distinct一样,可以将重复的结果集去重注意: 1 distinct去重记录要求每个字段都重复时,才算重复对象,这与sql一样2 distinct语句可以和 ... 
- linq group by / distinct
		https://www.cnblogs.com/qixu/p/6033532.html http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062 ... 
- Linq里where出现null的问题
		今天遇到一个问题,怎么在where里判断一个字段是否为null,并且这个字段不是字符串string类型,而是int和GUID类型,折腾了半天终于搞明白了.(由于项目是我半路接手的,问题是前期的同事给我 ... 
- linq里的select和selectmany操作
		Select() 和 SelectMany() 的工作都是依据源值生成一个或多个结果值.Select() 为每个源值生成一个结果值.因此,总体结果是一个与源集合具有相同元素数目的集合.与之相反,Sel ... 
- linq里lambda写的join查询,并附加动态拼接的条件,条件为enum类型的查询
		因为查询条件不固定的原因,sql式的linq查询没法动态拼接条件. 网上搜的资料整理之后终于解决. 参考资料: enum使用 http://blog.csdn.net/slowlifes/articl ... 
- 用于Linq的去重 Distinct
		/// <summary> /// 用于Linq的去重,扩展方法需要放到静态类中 /// </summary> ... 
- linq里的select和selectmany操作  投影运算
		原文地址:https://msdn.microsoft.com/zh-cn/library/bb546168.aspx#Mtps_DropDownFilterText 投影运算 其他版本 投影 ... 
- LINQ里的“equals”和“==”的区别
		对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true.对于 string ... 
随机推荐
- nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
			本文概要: nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择.本文介绍了一种简易方法快速搭建rtmp流媒体服务器,也叫rtsp转播,数据源不是读取文件,而是采用 ... 
- (转载)完美解决PHP中文乱码问题
			(转载)http://www.souzz.net/html/edu/php/php1/74181.html 一.首先是PHP网页的编码 1.php文件本身的编码与网页的编码应匹配 a.如果欲使用gb2 ... 
- css表格表头表尾固定,表身滚动
			表头表尾固定,表身滚动实现用了3个table标签 <!DOCTYPE html> <html> <head> <meta http-equiv="C ... 
- 【HTML】Advanced5:Accessible Forms
			1.label <form> <label for="yourName">Your Name</label> <input name=&q ... 
- BestCoder Round #81 (div.1)A
			水题...就是n的三进制后m位 #include<cstdio> #include<cstring> #include<cstdlib> #include<i ... 
- Centos System Info
			系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ... 
- 最短路变形 poj3615&
			问题: 牛要跨过一些障碍,希望以最小的体力跨过障碍,并且对于一条路径,只在乎其中最高的障碍. 输入N代表站点数,标记为1—N,输入M代表路径数,从站点S到E之间需要跨过高度为H的障碍. 输入T代表牛要 ... 
- Sublime Text 教程
			编辑器的选择(Editor Choices) 从初学编程到现在,我用过的编辑器有EditPlus.UltraEdit.Notepad++.Vim.TextMate和Sublime Text,如果让我从 ... 
- ARM MIPS PowerPC比较
			ARM, MIPS, Power PC的比较 “ARM面向的低端消费类市场,拼的是功耗:PowerPC面向的是中高端市场,比的是性能,好像还没看到谁的手机是PowerPC的,也没有看到谁家企业级以 ... 
- IOS-Archiver文件归档(2)
			Archiver是持久化数据的一种方式,他跟 Plist的差别在于他能持久化自己定义对象.但他没Plist那么方便. Archiver默认能持久化的数据有NSNumber,NSArray,NSDict ... 
