zoukankan      html  css  js  c++  java
  • 将不确定变为确定~LinqDistinct()方法是否可以对复杂结果集进行去重?

    回到目录

    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()语句会生效

    结果是正确的:

    回到目录

  • 相关阅读:
    Ubuntu 16.04 设置静态IP 注意事项
    C++ Primer: 1. 初识输入和输出
    车牌识别1:License Plate Detection and Recognition in Unconstrained Scenarios阅读笔记
    梳理检测论文-Refinement Neural Network
    linux 的 磁盘管理
    ubuntu 18 设置语言环境
    Ubuntu 18.04 的网络配置
    YoLo 实践(1)
    Distributed TensorFlow
    MXNet 分布式环境部署
  • 原文地址:https://www.cnblogs.com/lori/p/2701207.html
Copyright © 2011-2022 走看看