C#:如何遍历DataColumn中的内容?

3

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

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

我只需要遍历这一列的值,看看是否存在一个值。 求助

3个回答

4
你需要迭代行,而不是列。
DataColumn SETTINGS = dt.Columns["DEFAULTSETTINGS"];
foreach(DataRow row in dt.Select())
{
    object columnValue = row[SETTINGS];
    // Do something with columnValue
}

3

不需要使用Linq或手动迭代DataRows,因为普通的ADO.NET有一些解决方案,如DataTable.SelectDataView.RowFilter


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

很明显,一旦你获得了筛选后的行,你就可以随心所欲地处理它们。在我的例子中,我只是检查是否有任何行符合条件,但你可以根据自己的需求对它们进行操作。

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”列是否包含字符串“default”。Field 扩展方法只是将该列中的对象强制转换为给定类型,因此您可以更改类型参数而不是使用 ToString()。因此,针对您的示例,您可能可以使用以下代码:


DataColumn col = dt.Columns["DEFAULTSETTINGS"];
bool valueExists = dt.AsEnumerable().Any(row => "default".Equals(row.Field<string>(col), StringComparison.OrdinalIgnoreCase);

LINQ很好用;更简短的写法是.AsEnumerable().Contains(value) - Pavel Minaev
我得到了“当前上下文中不存在名称'col'”的错误信息。bool valueExists = dt.AsEnumerable().Any(row => row.Field<object>(col).Equals(value)); - zion
@zion - 如果你上面的示例是实际代码,请使用SETTINGS而不是col。 - Lee
两者都不起作用,我没有收到错误信息,但这令人困惑。string value = "default"; //期望值bool valueExists = dt.AsEnumerable().Any(row => row.Field<object>(SETTINGS).ToString().Equals(value)); StatusText.Text = valueExists.ToString(); - zion
它仍然没有起作用,我从布尔值中得到了错误的结果,而不是true,因为“默认值确实存在”。 - zion
你确定它实际上包含值“default”(而不是例如“Default”或“DEFAULT” - 即大小写不同)吗? - Pavel Minaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接