如何循环遍历数据集(来自存储过程)并检查每行的单个字段

How can I loop through a dataset (from a stored procedure) and check against a single field per row

我有一个从存储过程中填充的数据集 dsResult。一旦我验证了数据集不为 null 并且有行 returned,我想遍历该 ds 并检查 isActive 字段以查看是否有任何行处于活动状态,如果其中有任何行,我将 return 整个数据集。

  foreach (DataRow dr in dsResult.Tables)
            {
                if (dr.["IsActive"] == '1')
                {
                    return  dsResult;
                }
            }
  1. 我做这件事的方式是否正确?如果是...
  2. 我在 ["IsActive"] 上收到 "identifier expected" 错误,我不确定如何解决它。

非常感谢任何总体建议

1- 这没问题,但如果您使用 linq to dataset 可能会更容易

https://msdn.microsoft.com/en-us/library/bb386977(v=vs.110).aspx

2-去掉多余的DOT

if (dr["IsActive"] == '1')

可能 Linq 是一个更简单的选择

  // if row["IsActive"] contains char
  if (dsResult.Tables.OfType<DataRow>().Any(row => (char)row["IsActive"] == '1'))
    return dsResult;

EDIT:正如我从评论中看到的那样,数据集中存储的不是 character 1;获取 1 恕我直言的最安全方法是 Convert 当类型未知时

  // since we don't know actual type of row["IsActive"] (integer, boolean, string)?
  // we should convert
  if (dsResult.Tables.OfType<DataRow>().Any(row => Convert.ToInt32(row["IsActive"]) == 1))
    return dsResult;

数据行中的列值是对象类型。您需要执行 ToString 或将对象转换为正确的数据类型才能进行比较。

if (dr["IsActive"].ToString() == "1")

if ((int)dr["IsActive"] == 1)