【问题标题】:Remove duplicate rows from c# datatable using dataview.totable() not working for empty row values使用 dataview.totable() 从 c# 数据表中删除重复行不适用于空行值
【发布时间】:2021-08-18 21:59:26
【问题描述】:

在添加新行之前,我需要检查现有数据行(所有列)是否存在数据表中可能存在的重复项。目前使用向表dt1添加新数据行(使用itemarray)并比较现有表(dt1)和新表(dt1.dataview.totable(true))的行数的方法。但是,当行包含空/空值时,这似乎不起作用

| Col1 | Col2 |
|------|------|
|Abc   |      |
|      |Xyz   |

当我尝试添加新数据行 - (Abc, ) 时,它会被解释为不同的行。有没有办法使用 dataview.totable() 或 linq 方法来检查行是否已存在(需要检查所有列的值)或任何其他更简单的方法来处理此类空/空值? *数据表的列是动态变化的,所以不能依赖列名

【问题讨论】:

  • 感谢指出,该标签是错误添加的,我是7.x版本
  • 所以您希望字段值为空字符串的行与值为DBNull.Value 的字段相同?如果是这样,多个空格是否也被认为等于 null/empty?

标签: c# asp.net .net asp.net-mvc


【解决方案1】:

哎呀,要么总是为“”输入 dbnull,要么总是为 dbnull 输入“”。

如果您没有在数据中采用一套 HARD 规则,那么编写代码将永远是一件非常痛苦的事情。计算机和代码必须有可靠的规则,如果你的设计很好,有点空白,但有点空 - 整个过程变得痛苦。这个“长时间”规则(在您的规则中 100% 定义)适用于所有代码 - 不仅仅是这个示例。

我认为对于这种情况?如果我们要忽略上述内容,我只会“正确编码”这个问题。 (我的选择始终为 null - 并使用针对表的数据视图来过滤和签入一个操作。

但是,由于“”和空值之间的触发器?

那么就用暴力破解代码吧。

这行得通:

我来自 SQL 服务器的表:

SELECT FirstName, LastName, HotelName from tblHotels

上面被推到一个数据表中 - 可以有空值。

所以,现在我们的代码是这样的:

    object[] MySearch = new[] { txtFirst.Text, txtLast.Text, txtHotel.Text };

    bool bolFound = false;
    foreach (var MyRow in MyTable.Rows)
    {
        if (FindRow(MySearch, MyRow) == true)
        {
            bolFound = true;
            break;
        }
    }

    Response.Write("<h2>Results of search = " + bolFound.ToString() + "</h2>");
}

public bool FindRow(object[] MySearch, DataRow OneRow)
{
    object[] ar2;
    ar2 = OneRow.ItemArray;

    for (int i = 0; i <= Information.UBound(MySearch); i++)
    {
        if (Information.IsDBNull(ar2[i]))
        {
            if (MySearch[i] != "")
                return false;
        }
        else if (MySearch[i] != ar2[i])
            return false;
    }

    return true;
}

因此,您只需循环行 - 您的测试会将数据表中的任何 db null 转换为“”。您假设您的搜索数组将始终使用 "" 而不是该数组中的 dbnull。

上面没有那么漂亮,但代码量也不大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多