c#不使用循环对datatable继续去重
时间: 2024-02-02 21:04:09 浏览: 151
你可以使用以下代码对DataTable进行去重,而不使用循环:
```csharp
public static DataTable RemoveDuplicateRows(DataTable table, string[] keyColumns)
{
//使用LINQ查询获取唯一行的集合
var uniqueRows = table.AsEnumerable().GroupBy(x => GetRowKey(x, keyColumns)).Select(x => x.First());
//创建一个新的DataTable
DataTable newTable = table.Clone();
//将唯一行添加到新表中
foreach (DataRow row in uniqueRows)
newTable.ImportRow(row);
return newTable;
}
private static string GetRowKey(DataRow row, string[] keyColumns)
{
//使用关键列的值构造行键
return string.Join("|", keyColumns.Select(c => row[c].ToString()));
}
```
该函数使用LINQ查询获取唯一行的集合,然后将唯一行添加到新的DataTable中。GetRowKey函数用于构造行键,该行键由关键列的值组成,以便在LINQ查询中进行分组。
例如,以下代码演示了如何使用该函数:
```csharp
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "John");
table.Rows.Add(2, "Jane");
table.Rows.Add(3, "John");
table.Rows.Add(4, "Jane");
string[] keyColumns = { "Name" };
DataTable newTable = RemoveDuplicateRows(table, keyColumns);
```
在上面的例子中,我们指定了"Name"作为关键列,函数将删除重复的"John"和"Jane"行,返回一个新的DataTable,其中仅包含两行,即"John"和"Jane"。
阅读全文