c# - 检查重复行的数据表(有一个扭曲)
问题描述
有很多关于如何检查 DataTable 中的重复项的示例,但是当 DataGridView 中有隐藏的标识列时,找不到任何关于如何实现它的示例。所以我有一个 DataGridView,它的 DataSource 来自 SQL 查询。该查询返回三列、唯一标识符以及网格所需的数据。将数据保存回来时,我需要标识列,但希望能够在保存之前检查记录是否存在重复项,目前这不起作用,因为标识使每一行都是唯一的。还有一个“删除”列,因此记录如下所示:
这是我用来检查重复项的代码:
// Create a copy of the data
var duplicateTable = dataTable.Clone();
var primaryKey = new DataColumn[duplicateTable.Columns.Count];
duplicateTable.Columns.CopyTo(primaryKey, 0);
duplicateTable.PrimaryKey = primaryKey;
// Check if any data row has a duplicate
return dataTable.Rows.Cast<DataRow>().Any(dataRow => duplicateTable.Rows.Contains(dataRow.ItemArray));
我要做的是检查项目和开始日期这两列,看看其中是否有重复。
提前致谢
马丁
解决方案
解决了这个问题,并在 Google 的帮助下,我整理了一种方法来做我想做的事情 - 请参见下文。
非常感谢
马丁
private static bool HasDuplicates(DataTable dataTable)
{
var blnReturnValue = false;
if (dataTable.Rows.Count == 0) goto SkipPoint;
var dataColumns = new List<ProfessionalData>();
for (var i = 0; i < dataTable.Rows.Count; i++)
{
var professionalRecord = new ProfessionalData
{
ItemId = Convert.ToInt32(dataTable.Rows[i]["ItemId"]),
ItemValue = Convert.ToInt32(dataTable.Rows[i]["ItemValue"]),
EffectiveDate = Convert.ToDateTime(dataTable.Rows[i]["EffectiveDate"].ToString())
};
dataColumns.Add(professionalRecord);
}
dataColumns.ForEach(k =>
{
var item = dataColumns.FirstOrDefault(l =>
l.ItemValue == k.ItemValue && l.EffectiveDate == k.EffectiveDate);
if (item != null) blnReturnValue = true;
});
SkipPoint:
return blnReturnValue;
}
internal class ProfessionalData
{
internal int ItemId { get; set; }
internal int ItemValue { get; set; }
internal DateTime EffectiveDate { get; set; }
}
推荐阅读
- python - Google 事件 API:事件已更新,未发送电子邮件通知
- java - Spark:由 S3 aws-sdk 或作为 RDD 读取
- python - 如何获取使用我的 python 记事本程序启动的文件的名称?
- wso2 - WSO2 中的参考数据缓存用例
- c# - Xpath 在 div 标签内查找 webelement
- r - creating multiple new variables from means using grep or str_which in tidyverse
- odata - 在 $select 中使用长表名查询 OData 时出现问题
- dynamics-crm - D365 Web API / OData - 通过“CascadeConfiguration”枚举值过滤关系时出错
- amazon-s3 - 与 S3 集成的 AWS Api Gateway
- graphql - 在 react-admin 中使用 hasura-graphql 数据提供程序仅从表中获取不同的数据