Linq IEnumerable 去重

深入理解C#中IEnumerable的延迟执行 摘要:本文探讨了C#中IEnumerable<T>接口的延迟执行特性可能导致的问题。通过实例分析发现,由于每次枚举都会重新执行查询表达式,导致对象修改失效。解决方案是及时将结果缓冲为列表(.ToList())。文中还通过添加调试输出验证了这一机制,强调理解延迟执行对编写可靠代码的重要性,建议在需要多次操作序列时及时转换为具体集合类型。 阅读详情

去重

  1. IEqualityComparer
    实现 IEqualityComparer接口
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();
    }
}
  1. GroupBy
    使用GroupBy方式去重
List<Product> distinctProduct = allProduct
 .GroupBy(p => new {p.Id, p.Name} )
 .Select(g => g.First())
 .ToList();
  1. Distinct
    对需要Distinct的字段进行分组,取组内的第一条记录这样结果就是Distinct的数据了。

方法的使用

  • 针对ID,和Name进行Distinct
var query = allProduct.DistinctBy(p => new { p.Id, p.Name });
  • 仅仅针对ID进行distinct:
var query = allProduct.DistinctBy(p => p.Id);
  1. hash 去重
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;
       }
   }
}

Linq groupby

  1. 分组合并查询 查询表达式 … group… by…
var groupPlanDetails = from projectPlanDetail in planDetails
                                   group projectPlanDetail by projectPlanDetail.ProjectId;
            var periPlanDetails =groupPlanDetails.Select(t => new PeriPlanDetailInfo(){
                EmpIds = t.FirstOrDefault().EmpIds,
                Patrollers = t.FirstOrDefault().Patrollers,
                PeriStartTime = t.FirstOrDefault().PeriStartTime,
                PeriEndTime = t.FirstOrDefault().PeriEndTime,
                ProjectId = t.FirstOrDefault().ProjectId,
                ProjectName = t.FirstOrDefault().ProjectName,
                Type = t.FirstOrDefault().Type,
                State = t.Where(s => s.State==2).Count()>0?2: (t.Where(s => s.State == 0).Count() == 0 ? 1 : 0),
                Count = t.Sum(s=>s.Count),
                PeriFrequency = t.Sum(s=>s.PeriFrequency),
            });

Linq数据分组官方文档

2D Nesting Defining a CSV File of Part Data 若。 阅读详情

相关推荐

图像去雾常见数据集

上述数据集涵盖了室内、室外、真实和合成等多种场景,可以满足不同研究需求。在选择数据集时,建议根据具体任务的应用场景和目标选择合适的数据集,例如真实雾天图像适合模型的实际应用验证,而合成数据则适合模型的快速迭代和训练。希望本文能为从事图像去雾研究的朋友提供一些帮助!

m0_68604571的博客 6334

C#中IEnumerable<T>.Distinct()将指定实体类对象用Lambda表达式实现多条件去重

背景说明 在EF等ORM框架中需要以List实体类的方式对数据进行大量操作,其中免不了对一些数据进行去重复,而C#中IEnumerable.Distinct()便提供了这一功能。只是对刚开始接触的新人来说比价抽象难以接受,本文会对这一功能进行简要说明,如果有更好的实现方式,也请大家畅所语言。 在写本文时,本人也在网上搜索了很多相关资料,其中有几篇比较有参考价值,也是重点,本文也是基于这几篇文章...

机械键盘侠博客 3831

C# WPF多页面间的数据共享(经典)

实现页面间的数据共享有很多方法,比如:①事件的发布订阅 ②委托③ioc容器④静态类等,这节主要通过静态的集合实现数据的添加和获取。

sf315418的博客 639

C#实现 Linq 序列的Distinct—— IEnumerable<T>.Distinct<T>()——IEqualityComparer

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

诗人江湖老的专栏 2万+

LLCE、PFE模块,二层交换/桥接的通用学习转发机制

NXP 文档里给出的正式全称如下:面向 CAN/CAN-FD、LIN、FlexRay 的“低延迟通信引擎”,用多核 M0 固件做报文收发、过滤、路由,把主 CPU 中断负荷降到几乎 0。“数据包转发引擎”,负责以太网帧的分类、修改、转发、VLAN/NAT/IPsec 等 offload,支持 2 Gbit/s 线速且主机负载 ≈0。两者都跑各自固件,通过内部 AXI 桥可互连,实现“CAN→ETH”零主核参与的硬件级网关功能。是它们都集成在。

qq_25461777的博客 1303

SAP Workflow 工作流开发步骤总结

SAP WORKFLOW

qq_36952606的博客 5092

在LINQ中使用Distinct时如何正确实现IEqualityComparer.GetHashCode()方法

在使用LINQ的时候常常会用到Distinct()方法来获取一个List中不重复的元素.对于简单的元素,如string,int等类型可以直接使用无参数的Distinct()方法.但是如果需要对复杂的类型元素进行Distinct操作,就需要自己实现IEqualityComparer接口. IEqualityComparer有两个方法,一个是Equals()方法,一个是GetHashCode...

diaotanluan4788的博客 209

深度学习环境搭建:CUDA、Anaconda、PyTorch 完整安装与验证教程

步骤操作验证命令1安装 CUDA 工具包nvcc -V2安装 Anaconda3创建 yolo 环境4安装 PyTorch5验证 GPU。

qq_37606844的博客 321

IEnumerable转DataTable及去重

using System; using System.Data; using System.Reflection; namespace System.Collections.Generic { public static class IEnumerableExtend { /// <summary> /// IEnumerable转换成...

qq_32157579的博客 1万+

深入解析.Net中SM2与sm-crypto的跨平台加解密实践

本文深入探讨了在.Net平台与前端sm-crypto库之间实现SM2国密算法跨平台加解密的实践方案。针对对接中常见的密钥格式、密文拼接顺序(C1C3C2与C1C2C3)等核心难点,提供了基于BouncyCastle的完整工具类实现、前后端联调示例及问题排查指南,旨在帮助开发者构建安全、兼容的数据加密通道。

weixin_29322855的博客 370

华为OD机试真题 新系统【小学英语老师批改作文】

华为OD机试 新系统真题【小学英语老师批改作文】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【小学英语老师批改作文】

qq_45776114的博客 923

C# Linq 的三种去重方式(Distinct)

前言 关于C#中默认的Distinct方法在什么情况下才能去重,这个就不用我再多讲,针对集合对象去重默认实现将不再满足,于是乎我们需要自定义实现来解决这个问题,接下来我们详细讲解几种常见去重方案,孰好孰歹自行判之。 首先给出我们需要用到的对象,如下: public class Person { public string Name { get; set; } public int Age { get; set; } } 接下来我们添加100万条数据到集合中,如下:

混迹自留地 2万+

AIGC实战——多模态模型DALL.E 2

DALL.E 2 是 OpenAI 提出的一个大规模文本生成图像模型,可以根据文本提示生成各种风格的逼真图像。它通过将预训练模型 CLIP 与 GLIDE 中的扩散模型架构相结合完成任务。它还具有其他应用,例如通过文本提示编辑图像和提供给定图像的变体。虽然它也有一些局限性,例如不一致的文本渲染和属性绑定,但 DALL.E 2 是仍然一个非常强大的AI模型,推动了生成模型的发展。

盼小辉丶的博客 1万+

【.NET开发者必藏】:深入剖析Concat与Union底层机制,提升查询效率300%

掌握LINQ Concat 与 Union高效合并数据集,解析其底层机制与性能差异。适用于去重合并、集合操作等场景,提升查询效率300%。深入对比适用条件与优化技巧,.NET开发者必读,值得收藏。

InitFlow的博客 314

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

DataTable,List去重复记录的方法

今天一位朋友问如何去掉DataTable里重复的记录(DataTable是别人返回过来的,不能再重新查询数据库,所以无法用sql中的select distinct xxx处理,只能在DataTable上动脑筋) 思路:将DataTable转成IEnumerable,然后就能调用Distinct方法了 by 菩提树下的杨过 http://yjmyzz.cnblogs.com/ using...

weixin_30446197的博客 91

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# LINQ 入门到实战:常用操作符详解、延迟执行与避坑指南(初学者向)

本文以初学者视角,详解 C# LINQ 的核心概念与常用操作符。通过对比传统循环与 LINQ 写法,展示其简洁、可读性强的优势。重点讲解 Where 筛选、Select 投影、OrderBy 排序等常用方法,并强调“延迟执行”机制及 IEnumerable 与 IQueryable 的区别。结合实例演示数据处理流水线,帮助读者掌握 LINQ 核心用法,避开类型转换、排序覆盖等常见陷阱,快速上手实战。

hao060216的博客 546

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C#怎么使用LINQ Zip合并 C#如何用Zip方法将两个集合按索引位置配对合并处理【语法】

它只处理到较短集合的末尾,超出部分直接丢弃——这点很多人在调试时才发现数据“少了一半”。必须确保两个集合都支持枚举(IEnumerable<T>),数组、List<T>、查询表达式结果都行类型不要求相同,Zip<TFirst, TSecond, TResult> 的三个泛型参数可各自独立如果想保留长集合剩余项,Zip 不适合,得自己写循环或用第三方库(如 MoreLINQ 的 ZipLongest)怎么写安全可靠的 Zip 表达式别裸写 Zip,尤其当集合来源不可控(比如用户输入、DB 查询结果为空)时。

m0_67429464的博客 234

揭秘C# LINQ数据合并难题:Union和Concat到底该怎么选?

掌握C# LINQ联合查询Union与Concat的选择秘诀,解决数据合并去重与拼接难题。详解两者适用场景、性能差异及核心方法,助你高效处理集合操作。实用技巧值得收藏。

DevPath的博客 894

Linq distinct去重方法之一

Linq distinct去重方法之一

Martin 的博客 2万+

linq去重

最好的办法是添加一个扩展方法:原来的dstinct()就可以用DistinctBy()替换 public static IEnumerable&lt;TSource&gt; DistinctBy&lt;TSource, TKey&gt;(this IEnumerable&lt;TSource&gt; source, Func&lt;TSource, TKey&gt; keySelector)...

終99 的博客 2731

【LINQ高手进阶必读】:Concat与Union的5大核心差异及性能优化策略

掌握LINQ Concat 与 Union的5大核心差异,深入解析适用场景与性能优化策略。对比去重机制、执行效率及集合处理方式,助你精准选择高效方法。实用技巧值得收藏。

FastProceed的博客 307

为什么你的LINQ查询越来越慢?:深入解析Union与Concat性能瓶颈

掌握C# LINQ联合查询Union与Concat性能优化方法,解决查询变慢难题。对比二者在去重、顺序、数据源合并中的适用场景,解析底层机制与关键差异,提升代码效率。开发必备技巧,值得收藏

FuncFun的博客 904

linq查询去重

通过自定义扩展方法DistinctBy实现去重 public static IEnumerable<TSource> DistinctBy<TSource, TKey> (this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) ...

weixin_33725515的博客 782

LINQ Intersect与Except深度解析:掌握这3个技巧让你的查询效率提升80%

掌握LINQ Intersect与Except高效处理集合运算,解决数据对比难题。详解交集、差集操作适用场景,结合匿名类型与自定义比较器的3大优化技巧,显著提升查询性能。代码简洁易读,大幅减少循环遍历开销,值得收藏

CodeTrick的博客 371

C# Enumerable类 之 数据筛选

C# Enumerable类 之 数据筛选

鲤籽鲲的博客 1043

ASP.NET Lambda去重方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BusinessLogic { public static class LambdaHelper { // var query = people.DistinctBy(p =

ASP.NET 2803
上一篇: web 打开window应用
下一篇: C# dynamic 支持动态语言运行时的类(强语言中的弱语言实现方式)
BikeRiver
博客等级 码龄10年 11粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值