检查表是否包含C#行

本文关键字:包含 是否 检查表 | 更新日期: 2023-09-27 18:19:55

我正试图弄清楚我的数据表是否包含某一行。所以我使用了.Contains方法,但当我尝试运行程序时,遇到了一个MissingPrimaryKeyException,我无法解决。

DataTable table = dataQuery.executeQuery();
foreach(DataRow row in table.Rows)
{
    if(table.Rows.Contains("certainRow"))
    {
        blah blah blah
    ...

我第二次叫桌子时才得到例外。行,这对我来说毫无意义。如果我的表没有主键,它不会在foreach调用中给我一个错误吗?

编辑:我刚刚意识到Contains做了一些比我想象的不同的事情。Matthijs。。。是的,这正是我想要的。我需要知道"certainRow"是否真的是一行,否则我无法操作该行中的数据。

不幸的是,我是C#的新手,已经5年多没有编程了,所以我不知道是否有一种方法可以满足我的需求。或者如果我需要自己创造一些东西。

编辑#2:我使用DataTableReader找到了解决问题的方法。

private bool doesExist(string rowName, DataTable table)
    {
        bool value = false;
        DataTableReader reader = new DataTableReader(table);
        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                if (reader.GetValue(i) == rowName)
                {
                    value = true;
                }
            }
        }
        return value;
    }

检查表是否包含C#行

您应该能够使用DataTableReader,更多信息可以在此处找到。

例如:

private static DataTable GetCustomer()
{
     DataTable table = new DataTable();
     DataColumn id = table.Columns.Add(@"Id", typeof(int));
     table.Columns.Add(@"Name", typeof(string));
     table.PrimaryKey = new DataColumn[] { id };
     table.Rows.Add(new object[] { 1, @"John" });
     return table;
}

上面的代码将构建一个表,正如您所看到的,您定义了Primary Key并添加了Content。这就是构建表的方式。现在阅读,你会:

using(DataTableReader reader = new DataTableReader(new DataTable[] { customer }))
{
     do
     {
         if(reader.HasRows)
         {
              // Do Something
         }
     } while (reader.NextResult());
}

正如您所看到的,它验证行是否存在,然后执行任务。非常简单的例子,希望能有所帮助。

对于真值或假值,.Contains将返回一个boolean

关于您的评论,您可以致电reader[@"ColumnName"],它应该尝试毫无问题地阅读。因此,如果:

if(reader[@"ColumnName"] != DBNull.Value)
{
     // Do Something.
}

您可以只写:

bool contains = table.Rows.Cast<DataRow>().SelectMany(r => r.ItemArray).Contains(value);