linq 之 Distinct的使用

 1         public class Product
 2         {
 3             public string Name { get;set;}
 4             public int Code { get; set; }
 5         }
 6         class ProductComparet : IEqualityComparer<Product>
 7         {
 8             public bool Equals(Product x, Product y)
 9             {
10                 if (object.ReferenceEquals(x,y))
11                 {
12                     return true;
13                 }
14                 if (object.ReferenceEquals(x,null)||object.ReferenceEquals(y,null))
15                 {
16                     return false;
17                 }
18                 return x.Code == y.Code && x.Name == y.Name;
19             }
20
21             public int GetHashCode(Product product)
22             {
23                 if (object.ReferenceEquals(product, null))
24                 {
25                     return 0;
26                 }
27                 int hashProductName = product.Name == null ? 0 : product.Name.GetHashCode();
28
29                 int hashProductCode = product.Code.GetHashCode();
30                 return hashProductName ^ hashProductCode;
31
32             }
33         }

        static void Main(string[] args)
        {

            Product[] products = { new Product { Name = "apple", Code = 9 },
                       new Product { Name = "orange", Code = 4 },
                       new Product { Name = "apple", Code = 9 },
                       new Product { Name = "lemon", Code = 12 } };

            IEnumerable<Product> noduplicates = products.Distinct(new ProductComparet());
            foreach (var item in noduplicates)
            {
                Console.WriteLine(item.Name+" "+item.Code);
            }
        }

linq 之 Distinct的使用

时间: 2024-10-07 14:49:17

linq 之 Distinct的使用的相关文章

Linq使用Distinct删除重复数据时如何指定所要依据的成员属性zz

最近项目中在用Linq Distinct想要将重复的资料去除时,发现它跟Any之类的方法有点不太一样,不能很直觉的在呼叫时直接带入重复数据判断的处理逻辑,所以当我们要用某个成员属性做重复数据的判断时,就必需绕一下路,这边稍微将处理的方法做个整理并记录一下. 首先为了方便接下去说明,我们必须先来准备后面会用到的数据类别,这边一样用笔者最常用来示范的Person类别,内含两个成员属性ID与Name. view source print? 01.public struct Person 02.{ 03

如何很好的使用Linq的Distinct方法

Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面给出解这个问题的方法: 方法1: Distinct 方法中使用的相等比较器.这个比较器需要重写Equals和GetHashCode方法,个人不推荐,感觉较麻烦,需要些多余的类,并且用

扩展Linq的Distinct方法动态根据条件进行筛选

声明为了方便自己查看所以引用 原文地址:http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面给出解这个问题的方

Linq之Distinct

1 var d = (from e in list 2 select e.PROPERTY).Distinct();

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 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

一个关于Linq对引用类型元素集合去重问题的思考

背景 说到对集合去重处理,第一时间想到的肯定是Linq的Distinct扩展方式,对于一般的值类型集合去重,很好处理,直接list.Distinct()即可.但是如果想要对一个引用类型的集合去重(属性值都相同就认为重复),就会发现,直接Distinct()是不行的: public class User { public int Id { get; set; } public string Name { get; set; } } var list = new List<User>() { ne

[AaronYang]C#人爱学不学[5]

这世上有三样东西是别人抢不走的:一是吃进胃里的食物,二是藏在心中的梦想,三是读进大脑的书 --Aaronyang的博客(www.ayjs.net) 1. 数组-的疑惑? 1.1  多维数组       例如int[,]  a=new int[2,4]; 共两行,每组4个.     int[,] a={{1,2,3,4},{6,7,8,9}} 1.2  锯齿数组       例如int[][] a=new int[2][];可以确定一共2行,但每行几个不知道,所以可以任意个.导致每行的长度可能不一

关于去重复问题

http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html 如何很好的使用Linq的Distinct方法[全屏看文] Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面