获取DataTable字段唯一值(DISTINCT)

本文介绍了一种方法,用于从源DataTable中根据指定字段及过滤条件选择唯一值,并将其复制到新的DataTable中。该方法考虑了NULL值的情况,并提供了一个辅助函数来比较两列值是否相等。
         ///   <summary>
        
///  将所选字段的唯一值复制到一个新的 DataTable。 
        
///   <para> 如果字段包含 NULL 值,目标表中的记录还包含 NULL 值 </para>
        
///   </summary>
        
///   <param name="sourceTable"> 源数据表 </param>
        
///   <param name="filterExpression"> 检索条件 </param>
        
///   <param name="fieldName"> 唯一值的字段名 </param>
        
///   <returns></returns>  
         public  DataTable SelectDistinct(DataTable sourceTable,  string  filterExpression,  string  fieldName)
        {
            DataTable dt 
=   new  DataTable(sourceTable.TableName);
            dt.Columns.Add(fieldName, sourceTable.Columns[fieldName].DataType);

            
object  lastValue  =   null ;
            
foreach  (DataRow dr  in  sourceTable.Select(filterExpression, fieldName))
            {
                
if  (lastValue  ==   null   ||   ! (ColumnEqual(lastValue, dr[fieldName])))
                {
                    lastValue 
=  dr[fieldName];
                    dt.Rows.Add(
new   object [] { lastValue });
                }
            }
            
return  dt;
        }
        
private   bool  ColumnEqual( object  A,  object  B)
        {
            
if  (A  ==  DBNull.Value  &&  B  ==  DBNull.Value)
                
return   true ;
            
if  (A  ==  DBNull.Value  ||  B  ==  DBNull.Value)
                
return   false ;
            
return  (A.Equals(B));
        } 

 

转载于:https://www.cnblogs.com/EasyData/archive/2010/01/20/1652173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值