Linq去重(自定义字段)

业务场景,接受一个DataTable ;根需求需要按照品号去重(业务场景:明细表存在多笔相同品号)

在这样的场景下不能简单的使用如下写法去重:

var _list = _tempDataTable.AsEnumerable().Where(p => p["TOTAL_INV_QTY"].ToDecimal() > p["TOTAL_ISSUE_INV_QTY"].ToDecimal()).Distinct().ToList();

定义一个自定义比较器:

 class DataRowComparer : IEqualityComparer<DataRow> {
             public bool Equals(DataRow x, DataRow y)
            {
                if (Object.ReferenceEquals(x, y)) return true;
                if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                    return false;
                return x["ITEM_CODE"].Equals(y["ITEM_CODE"]);//按照品号比较而不是简单的引用
            }

             public int GetHashCode(DataRow row)//重写HashCode
            {
                if (Object.ReferenceEquals(row, null)) return 0;
               // int hashName = row["ITEM_NAME"] == null ? 0 : row["ITEM_NAME"].GetHashCode();
                int hashCode = row["ITEM_CODE"].GetHashCode();
                //return hashCode ^hashName;
                return hashCode;
            }
        }  

//去重操作:
var _list = _tempDataTable.AsEnumerable().Where(p => p["TOTAL_INV_QTY"].ToDecimal() > p["TOTAL_ISSUE_INV_QTY"].ToDecimal()).Distinct(new DataRowComparer()).ToList();

原文地址:https://www.cnblogs.com/shuoli/p/8319051.html

时间: 2024-10-09 22:00:04

Linq去重(自定义字段)的相关文章

Linq多表链接分页,Select new{&quot;需要的字段列..&quot;},配合杨涛Mvcpager,前台遍历展示自定义字段

题前:,Select new{"需要的字段列.."}好处,减少不必要数据的查询,尤其是分布式的时候,网络再不好的情况下,而不必要的数据又很多,Select new{"需要的字段列.."}好处明显 如题,Linq多表链接分页,Select new{"需要的字段列.."},配合杨涛Mvcpager,前台遍历展示自定义字段 (1)  我的例子是,(Tb_Mnager)管理员表与(Tb_Role)角色表联查,返回两个表部分字段的组合 如下控制器代码: p

SharePoint 2013 图文开发系列之自定义字段

原文:SharePoint 2013 图文开发系列之自定义字段 SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应用中,我们还需要一些功能特殊的字段,下面,我们简单介绍下字段的开发,大家了解以后,可以按照需求扩展自己的字段类型. 1.新建项目,选择SharePoint 2013 空项目,如下图: 2.选择调试网站和解决方案类型,如下图: 3.添加新项,类,这个是用来定义字段的,如下图: 4.添加新项,类,这个是

Log4net 自定义字段 写入Oracle 使用ODP.NET Managed驱动

一.环境说明: 开发工具:vs2010   ,数据库:oracle 11g ,版本:log4net的目前最新版本1.2.13.0    :  Oracle.ManagedDataAccess.dll  Version 4.121.1.0 二.官网dll准备 log4net      http://mirrors.hust.edu.cn/apache//logging/log4net/binaries/log4net-1.2.13-bin-newkey.zip Oracle.ManagedData

linq查询一个字段的总和

(from s in dc.StockInItem   //所要查询单表 join si in dc.StockIn           //联合的表 on s.StockInID equals si.StockInID     //两个表联合的相同条件 where (s.ColorsID == int.Parse(colorID) && s.SizesID == int.Parse(sizeID) && s.ProductID == int.Parse(ProtectID

利用WordPress自定义字段为文章添加下载按钮

树经常要上传一些资源来给大家分享,但是每次都要手动加链接,关联图片,十分麻烦,于是就利用了一下wordpress的自定义字段功能来自动添加下载按钮下面就来说说怎么实现这个功能吧~其实方法很简单,利用的就是下面这一段代码 <?php if(get_post_meta($post->ID, "download", $single = true) != ""){ ?> <div id="download"> <a h

redmine 自定义字段mysql表结构

redmine可以创建自定义字段,我经常用它来满足不同的管理需求,现在来解读一下,看看这些自定义字段是如何存在mysql表中的. 表issues 用来存放issue的标准字段. mysql> describe issues; +----------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------

帝国cms调用栏目自定义字段(栏目简介)如何操作

开源的cms就像一个操作系统,可以满足大部分人的需求,如果你想增加一些特殊的功能,那就二次开发呗,就像APP一样.帝国cms默认的栏目是没有调用栏目自定义字段的,我们可以增加一些概述类的文字,让读者对这个页面有个大概的了解,挺高一些用户体验. 帝国cms调用栏目自定义字段(栏目简介)如何操作呢? 栏目自定义字段调用说明 内置调用栏目自定义字段函数:ReturnClassAddField(栏目ID,字段名),栏目ID=0为当前栏目ID.取多个字段内容可用逗号隔开,例子: 取得'classtext'

WordPress超好用自定义字段插件:Advanced Custom Fields

WordPress经常需要扩展些字段, 扩展字段一般有两种方法. 1.自己写自定义面板,优点在主题里面比较灵活,但代码写的比较麻烦,对于新手不适合. 2.使用自定义字段插件,这里推荐Advanced Custom Fields 设置和使用相当方便. 下面介绍下安装及使用方法 一.安装插件:插件搜索:Advanced Custom Fields(第一个就是) 二.安装好后点击 菜单->字段 新建字段 填写字段信息 点击发布就可以了.关于字段类型看你自己的需要,需要图片就选图片. 三.填写字段内容

DEDECMS栏目自定义字段添加

用到的文件: catalog_add.htm  路径:\dede\templets\ catalog_edit.htm  路径:\dede\templets\  catalog_add.php  路径:\dede\ catalog_edit.php  路径:\dede\ 1.打开数据库找到:dede_arctype表,在表的最后面添加上我们自定义的字段名称: 首先打开catalog_add.htm文件在找到一个你认为不错的地方添加我们自定义栏目的编辑框,比如下面这是我自己添加的地方(添加在了 栏

grails Domian对象转JSON去class以及自定义字段的最佳方式

grails:2.4.x IDE:Intellij IDEA 13.x grails的Domain对象之间如果存在环形引用,直接使用as JSON只会输出关联对象的id,并且如果使用deep也会报错且deep并不支持层级输出设置.达不到一些程序的使用需求. 所以自己在网上翻了很多资料,最终测试出一个比较简单可靠的方案: 1.在config.groovy中添加一句针对JSON转换的配置 grails.converters.default.circular.reference.behaviour =