1. 程式人生 > >Linq實現DataTable動態去重複

Linq實現DataTable動態去重複

本文介紹一種按欄位動態對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();
    }
}