gpt4 book ai didi

.net - DataRow.GetChanges()或等效

转载 作者:行者123 更新时间:2023-12-01 22:53:07 26 4
gpt4 key购买 nike

使用DataTable.GetChanges()给我列出了所有被修改的行。是否有一些内置的方法可以在行级别执行相同的操作;检查哪些列已被修改,而不是在循环中手动比较ItemArray

最佳答案

没有。

您可以使用以下代码将值与以前的版本进行比较:

public static class DataRowExtensions
{
private static bool hasCellChanged(DataRow row, DataColumn col)
{
if (!row.HasVersion(DataRowVersion.Original))
{
// Row has been added. All columns have changed.
return true;
}
if (!row.HasVersion(DataRowVersion.Current))
{
// Row has been removed. No columns have changed.
return false;
}
var originalVersion = row[col, DataRowVersion.Original];
var currentVersion = row[col, DataRowVersion.Current];
if (originalVersion == DBNull.Value && currentVersion == DBNull.Value)
{
return false;
}
else if (originalVersion != DBNull.Value && currentVersion != DBNull.Value)
{
return !originalVersion.Equals(currentVersion);
}
return true;
}

public static IEnumerable<DataColumn> GetChangedColumns(this DataRow row)
{
return row.Table.Columns.Cast<DataColumn>()
.Where(col => hasCellChanged(row, col));
}

public static IEnumerable<DataColumn> GetChangedColumns(this IEnumerable<DataRow> rows)
{
return rows.SelectMany(row => row.GetChangedColumns())
.Distinct();
}

public static IEnumerable<DataColumn> GetChangedColumns(this DataTable table)
{
return table.GetChanges().Rows
.Cast<DataRow>()
.GetChangedColumns();
}
}

改编自 Verify which columns have changed in a datatable or datarow

示例:
DataTable table;
table.GetChangedColumns()

List<DataRow> listOfRows;
listOfRows.GetChangedColumns()

DataRow row;
row.GetChangedColumns()

关于.net - DataRow.GetChanges()或等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17130902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com