将不确定变为确定~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()语句会生效

结果是正确的:

本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变为确定~Linq-Distinct()方法是否可以对复杂结果集进行去重?,如需转载请自行联系原博主。

目录
相关文章
|
SQL Oracle 关系型数据库
SQL学习之使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一、如果我们只是对于在某个程序中的应用是需要按照如下的方式排序,我们只需在SQL语句级别设置排序方式:
662 0
SQL 循环遍历结果集
SQL 循环遍历结果集
226 0
|
索引 数据库
SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题
原文:SqlServer中的UNION操作符在合并数据时去重的原理以及UNION运算符查询结果默认排序的问题   本文出处:http://www.cnblogs.com/wy123/p/7884986.
2270 0
count去重和distinct去重
count去重和distinct去重
6955 0
|
关系型数据库 MySQL 数据库
select distinct去掉重复查询结果|学习笔记
快速学习select distinct去掉重复查询结果
264 0
|
SQL
SQL 操作结果集 -并集、差集、交集、结果集排序
原文:SQL 操作结果集 -并集、差集、交集、结果集排序 操作结果集   为了配合测试,特地建了两个表,并且添加了一些测试数据,其中重复记录为东吴的人物。   表:Person_1魏国人物       表:Person_2蜀国人物      A、Union形成并集     Union可以对两个或多个结果集进行连接,形成“并集”。
2501 0