将不确定变为确定~Linq-Distinct()方法是否可以对复杂结果集进行去重?
linq中也有像T—SQL的distinct方法,可以将重复的结果集去重,以下是我们使用 distinct()时需要注意的地方:
1 distinct去重记录要求每个字段都重复时,才算重复对象,这与T—SQL保持一至
2 disinct语句与orderby语句可以放在一起使用,对彼此不产生影响
3 distinct是在数据库端进行的操作,即,你在linq中的distinct与T-SQL的distinct效果一样,不会产生性能问题
4 distinct的数据集中不能有复杂对象,如果出现List<T>这种引用类型,那LINQ在解释成T—SQL时,将会把distinct()去掉,从而使去重操作失效
实例:
1 DataClasses1DataContext db = new DataClasses1DataContext(); 2 var linq = from _data in db.Res_Item 3 join data2 in db.Res_ItemCategory on _data.ID equals data2.ItemID 4 join data3 in db.Res_ItemPrice on _data.ID equals data3.ItemID into list 5 select new Res_Item_Ext 6 { 7 ID = _data.ID, //列说明: 产品编号 8 Name = _data.Name, //列说明: 商品名称 9 Res_ItemPrice=list.ToList(), 10 }; 11 var linq2 = linq.Where(i => i.ID == 5104).OrderBy(i => i.ID).Distinct().ToList(); 12 linq2.ForEach(i => Console.WriteLine(i.ID + i.Name));
由于在结果集中出现List<T>这种复杂类型,所以distinct()操作失效,如图:
如果在结果集中没有复杂类型Res_ItemPrice属性,那distinct()语句会生效
结果是正确的:
分类:
其它 / ASP.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示