检查表是否包含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;
}
您应该能够使用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);