用于Linq的去重 Distinct

/// <summary>

/// 用于Linq的去重,扩展方法需要放到静态类中

/// </summary>

/// <typeparam name="TSource"></typeparam>

/// <typeparam name="TKey"></typeparam>

/// <param name="source"></param>

/// <param name="keySelector"></param>

/// <returns></returns>

public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)

{

HashSet<TKey> seenKeys = new HashSet<TKey>();

foreach (TSource element in source)

{

if (seenKeys.Add(keySelector(element)))

{

yield return element;

}

}

}

调用方法:

list.DistinctBy(tmp => new { tmp.CountryName, tmp.VisaTypeName });

来自为知笔记(Wiz)

时间: 2024-10-31 11:12:30

用于Linq的去重 Distinct的相关文章

使用Linq中的Distinct方法对序列进行去重操作

使用Linq提供的扩展方法Distinct可以去除序列中的重复元素. 该方法具有以下两种重载形式: (1)public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source) (重载1) 通过使用默认的相等比较器对值进行比较并返回序列中的非重复元素. (2)publicstatic IQueryable<TSource> Distinct<TSour

C#实现 Linq 序列的Distinct—— IEnumerable&lt;T&gt;.Distinct&lt;T&gt;()——IEqualityComparer

简介 在C#中使用List或者Collection的时候,我们经常需要使用到Distinct操作,但是微软默认提供的Distinct重载方法并不能满足我们的需求.这时候,我们就需要自己动手做一番工作了. Distinct方法的重载 Linq的Distinct的方法有如下一个重载版本: public static IEnumerable<TSource> Distinc<TSource>( this IEnumerable<TSource> source, IEquali

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

去重 DISTINCT

就是过滤掉那些相同的列的value:看下面的name SELECT DISTINCT name FROM t_student 这里只能加上name,多加其他会报错,意思就是只能加上一个列 如:SELECT DISTINCT name FROM t_student  去重后: 原文地址:https://www.cnblogs.com/hello-dummy/p/9216814.html

c# linq lambda 去重,排序,取最高纪录。

----------------------------------------------------.对基础类型排序 方法一: 调用sort方法,如果需要降序,进行反转: List<int> list = new List<int>();    list.Sort();// 升序排序    list.Reverse();// 反转顺序 方法二: 使用lambda表达式,在前面加个负号就是降序了 List<int> list= new List<int>(

linq group by / distinct

https://www.cnblogs.com/qixu/p/6033532.html http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html https://docs.microsoft.com/zh-cn/dotnet/api/system.linq.enumerable.distinct?view=netframework-4.8 原文地址:https://www.cnblogs.com/wswind/p/10739818

mysql中去重 distinct 用法

在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user: 用distinct来返回不重复的用户名:select distinct name from user;,结果为: 这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:

C#扩展一般用于linq

下面是dictionary的扩展 1 using System.Collections.Generic; 2 3 namespace NetAnalysis.Common 4 { 5 6 public static class DictionaryExtensionMethodClass 7 { 8 /// <summary> 9 /// 尝试将键和值添加到字典中:如果不存在,才添加:存在,不添加也不抛导常 10 /// </summary> 11 public static Di

Linq学习总结1--参考Linq技术详解

2个要点: 1.linq操作的集合必须实现IEnumerable接口,所以在这3.0之前为实现该接口的集合需通过Cast或TypeOf方法转换成可Linq的集合; 2.查询式和Lame那啥表达式都可以一起使用.那个方便用哪个,他们只在第一次使用时才会真正去查询; List<Employee> ils = new List<Employee>() { new Employee(){IDCode="jack5",Age=20,littleName="ab&