本文介绍一种按字段动态对DataTable去除重复数据的方法
/// <summary>
/// 按照fieldName从sourceTable中选择出不重复的行,
/// 并且返回sourceTable中所有的列。
/// </summary>
/// <param name="sourceTable">源表</param>
/// <param name="fieldName">字段数组</param>
public static DataTable DistinctSomeColumn(DataTable sourceTable, params string[] fieldName)
{
if (fieldName == null || fieldName.Length == 0) return sourceTable;
return sourceTable.AsEnumerable().Distinct(new ColumnEquals(fieldName)).CopyToDataTable();
}
public class ColumnEquals : IEqualityComparer<DataRow>
{
public ColumnEquals(string[] sArr)
{
_sArr = sArr;
}
private string[] _sArr;
public bool Equals(DataRow x, DataRow y)
{
return !_sArr.Any(p => !x[p].Equals(y[p]));
}
public int GetHashCode(DataRow dr)
{
return dr.ToString().GetHashCode();
}
}