C#:如何迭代DataColumn中的内容?

时间:2009-09-08 23:15:37

标签: c# sql datatable dataset datacolumn

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

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

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

3 个答案:

答案 0 :(得分:4)

您迭代行而不是列

DataColumn SETTINGS = dt.Columns["DEFAULTSETTINGS"];
foreach(DataRow row in dt.Select())
{
    object columnValue = row[SETTINGS];
    // Do something with columnValue
}

答案 1 :(得分:3)

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


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

很明显,一旦获得过滤后的行,您就可以随心所欲地执行任何操作。在我的示例中,我只是检查是否有任何行符合条件,但您可以按照您认为合适的方式操作它们。

答案 2 :(得分: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扩展方法只是将该列的datarow中的对象转换为给定类型,因此您可以更改type参数而不是使用ToString()。所以对于你的例子,你可以使用它:


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