#region datatable去重
/// <summary>
/// datatable去重
/// </summary>
/// <param name="dtSource">需要去重的datatable</param>
/// <param name="columnNames">依据哪些列去重</param>
/// <returns></returns>
public static DataTable GetDistinctTable(DataTable dtSource, params string[] columnNames)
{
DataTable distinctTable = dtSource.Clone();
try
{
if (dtSource != null && dtSource.Rows.Count > 0)
{
DataView dv = new DataView(dtSource);
distinctTable = dv.ToTable(true, columnNames);
}
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
return distinctTable;
}

/// <summary>
/// datatable去重
/// </summary>
/// <param name="dtSource">需要去重的datatable</param>
/// <returns></returns>
public static DataTable GetDistinctTable(DataTable dtSource)
{
DataTable distinctTable = null;
try
{
if (dtSource != null && dtSource.Rows.Count > 0)
{
string[] columnNames = GetTableColumnName(dtSource);
DataView dv = new DataView(dtSource);
distinctTable = dv.ToTable(true, columnNames);
}
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
return distinctTable;
}

#endregion

#region 获取表中所有列名
public static string[] GetTableColumnName(DataTable dt)
{
string cols = string.Empty;
for (int i = 0; i < dt.Columns.Count; i++)
{
cols += (dt.Columns[i].ColumnName + ",");
}
cols = cols.TrimEnd(',');
return cols.Split(',');
}
#endregion


微软内部实现:​​点击打开链接​