如何循环遍历数据集(来自存储过程)并检查每行的单个字段
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;
}
}
- 我做这件事的方式是否正确?如果是...
- 我在 ["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)
我有一个从存储过程中填充的数据集 dsResult。一旦我验证了数据集不为 null 并且有行 returned,我想遍历该 ds 并检查 isActive 字段以查看是否有任何行处于活动状态,如果其中有任何行,我将 return 整个数据集。
foreach (DataRow dr in dsResult.Tables)
{
if (dr.["IsActive"] == '1')
{
return dsResult;
}
}
- 我做这件事的方式是否正确?如果是...
- 我在 ["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)