3

我有一个数据库列,我只需要检查一个值是否存在。

        DataTable dt = masterDataSet.Tables["Settings"];
        DataColumn SETTINGS = dt.Columns["DEFAULTSETTINGS"];

我只需要遍历此列中的值以查看值是否存在。帮助

4

3 回答 3

4

您迭代行,而不是列

DataColumn SETTINGS = dt.Columns["DEFAULTSETTINGS"];
foreach(DataRow row in dt.Select())
{
    object columnValue = row[SETTINGS];
    // Do something with columnValue
}
于 2009-09-08T23:17:21.713 回答
3

无需使用 Linq 或手动迭代 DataRows,因为普通的旧 ADO.NET 有几个解决方案,例如DataTable.SelectDataView.RowFilter


string value = "default"; 
bool found = dt.Select("DEFAULTSETTINGS = " + value).Length > 0;

很明显,一旦你得到过滤的行,你就可以对它们做任何你想做的事情。在我的示例中,我只是检查是否有任何行在条件范围内,但您可以按照自己认为合适的方式操作它们。

于 2009-09-09T01:08:40.483 回答
1

您可以在 .net 3.5 中使用 linq:


DataColumn col = dt.Columns["DEFAULTSETTINGS"];
object value = //expected value
bool valueExists = dt.AsEnumerable().Any(row => row.Field<object>(col).Equals(value));

编辑:从您试图查看“DEFAULTSETTINGS”列是否包含字符串“默认”的评论看来。Field 扩展方法只是将该列的数据行中的对象转换为给定类型,因此您可以更改类型参数而不是使用 ToString()。因此,对于您的示例,您可能可以使用它:


DataColumn col = dt.Columns["DEFAULTSETTINGS"];
bool valueExists = dt.AsEnumerable().Any(row => "default".Equals(row.Field<string>(col), StringComparison.OrdinalIgnoreCase);
于 2009-09-08T23:25:30.307 回答