码迷,mamicode.com
首页 > 其他好文 > 详细

Linq去重(自定义字段)

时间:2018-01-19 23:22:29      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:ota   ret   where   null   tin   一个   tar   tab   简单   

业务场景,接受一个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();

Linq去重(自定义字段)

标签:ota   ret   where   null   tin   一个   tar   tab   简单   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!