获取DataTable字段唯一值(DISTINCT)

        /// <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));
        } 

 

posted on 2010-01-20 10:54  迷你软件  阅读(1313)  评论(0编辑  收藏  举报

本网站绝大部分资源来源于Internet,本站所有作品版权归原创作者所有!!如有以下内容:章节错误、非法内容、作者署名出错、版权疑问、作品内容有违相关法律等请及时与我联系. 我将在第一时间做出响应!本站所有文章观点不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。