linq distinct去重
类别:编程学习 浏览量:3129
时间:2015-8-2 linq distinct去重
linq distinct去重一、使用Distinct()扩展方法去重
实例:根据Id去重
错误的方式
List<Product> products = new List<Product>()
{
new Product(){ Id="1", Name="n1"},
new Product(){ Id="1", Name="n2"},
new Product(){ Id="2", Name="n1"},
new Product(){ Id="2", Name="n2"},
};
var distinctProduct = products.Distinct();
返回4条数据,因为Distinct 默认比较的是Product对象的引用
正确的方式
新建类ProductIdComparer,继承 IEqualityComparer<Product>,实现Equals方法
public class ProductIdComparer : IEqualityComparer<Product>
{
public bool Equals(Product x, Product y)
{
if (x == null)
return y == null;
return x.Id == y.Id;
}
public int GetHashCode(Product obj)
{
if (obj == null)
return 0;
return obj.Id.GetHashCode();
}
}
使用的时候,只需要
var distinctProduct = allProduct.Distinct(new ProductIdComparer());
备注:现在假设我们要 按照 Name来筛选重复呢?则需要再添加一个类ProductNameComparer.
二、使用GroupBy方式去重
对需要Distinct的字段进行分组,取组内的第一条记录这样结果就是Distinct的数据了。
例如
List<Product> distinctProduct = allProduct
.GroupBy(p => new {p.Id, p.Name} )
.Select(g => g.First())
.ToList();
三、通过自定义扩展方法DistinctBy实现去重
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;
}
}
}
方法的使用
1、针对ID,和Name进行Distinct
var
query = allProduct.DistinctBy(p =>
new
{ p.Id, p.Name });
2、仅仅针对ID进行distinct:
var
query = allProduct.DistinctBy(p => p.Id);
标签:linq
您可能感兴趣
- LINQ TO SQL 中join
- linq中group by
- 如何查看linq生成的sql
- Linq中select查询
- linq xml 查询
- Linq中where查询
- linq not in 查询
- 使用 LINQPad 调试linq以及lambda表达式
- Linq操作Datable
- list使用linq排序
- linq中AsEnumerable和AsQueryable的区别
- linq中延迟执行
- linq distinct去重
- linq中join用法
- linq中let
- linq to sql 中Concat、Union、Intersect、Except
- 男人犯的错,为什么要女人来承担(为什么要女人来承担)
- 心理学 四个金蟾,哪个最招财 测你今生的运势有多棒(心理学四个金蟾)
- 吉善缘《聚宝金蟾》金蟾招财摆件 三足全铜蟾蜍客厅店铺开业礼品(吉善缘聚宝金蟾金蟾招财摆件)
- 招财化煞神兽,金蟾变了(招财化煞神兽金蟾变了)
- 26岁杨紫的白素贞遇上24岁鞠婧祎,哪个最美(26岁杨紫的白素贞遇上24岁鞠婧祎)
- 鞠婧祎和杨紫两种风格的女生,你心里谁比较美(鞠婧祎和杨紫两种风格的女生)
热门推荐
- 云主机和虚拟主机的区别(云主机有哪些虚拟化技术?)
- dedecms分页效果(织梦dedecms将列表页重复的第一页去除的方法)
- javascript的作用域详解精简版(浅谈JavaScript 中的延迟加载属性模式)
- dedecms自定义函数(DEDECMS相关文章以关键字相关的修改方法自定义函数)
- jQuery中noConflict()的用法
- python多线程多种方法(详解python多线程之间的同步一)
- 云主机和免备案空间(租用国内免备案云服务器空间靠谱吗?)
- python调用excel教程(利用python在excel里面直接使用sql函数的方法)
- nginx服务器有什么用(Nginx的作用详解,为什么在Web服务器中Nginx的比例越来越高?)
- dedecms更新后设置空白(织梦DedeCms上传的图片点击打开改为不新窗口打开)