不能应用遍历数据流的条件
本文关键字:条件 数据流 遍历 应用 不能 | 更新日期: 2023-09-27 18:09:35
我在datarow中应用了循环,我需要检查如果用户角色是admin,我需要应用一些条件。
现在一个用户可以有多个角色,假设用户史密斯有3个角色:Admin, Developer和Tester。因此,对史密斯来说,这个条件成为现实。对于Jane来说,她有4个角色:开发人员、测试人员、分析师等。普通用户,所以jane的条件为false(因为她不是管理员)
现在我写的代码是// filling up the dataTable.
DataTable dtAssignedRoles = (DataTable (Session[GlobalConstants.SESSION_USER_ASSGN_ROLE_DT]);
if (dtAssignedRoles != null && dtAssignedRoles.Rows.Count > 0)
{
foreach (DataRow dr in dtAssignedRoles.Rows)
{
if (dr["OT_ROLE"].ToString().ToUpper().Equals("ADMIN"))
{
// apply condition for admin here!
}
}
}
// Condition that would execute for Jane
if (strICol.Equals("N"))
{
e.Row.Cells[0].Text = string.Empty;
e.Row.Cells[0].Controls.Clear();
Image imgIColumnDesc = new Image();
imgIColumnDesc.ImageUrl = "~/Images/blackcircle.png";
e.Row.Cells[0].Controls.Add(imgIColumnDesc);
}
问题:对于smith来说,虽然他是管理员,但他也是开发人员和测试人员。因此有两个条件;一个用于admin,另一个用于非admin (dev + tester)
因此我想,我需要检查所有行,如果有一个角色具有admin,则应该满足条件。但我不知道该怎么做?
请指导。由于
您可以使用这个辅助函数来确定用户是否具有特定的角色…
public bool hasRole(string role, DataTable dtAssignedRoles)
{
if (dtAssignedRoles != null && dtAssignedRoles.Rows.Count > 0)
{
foreach (DataRow dr in dtAssignedRoles.Rows)
{
if (dr["OT_ROLE"].ToString().ToUpper().Equals(role))
{
return true;
}
}
}
return false;
}
EDIT: OR with Linq
public bool hasRole(string role, DataTable dtAssignedRoles)
{
return dtAssignedRoles.AsEnumerable().Any(a => a["OT_ROLE"].ToString().ToUpper().Equals(role.ToUpper()));
}
然后使用…
if(hasRole("ADMIN",dtAssignedRoles))
{
//DO stuff
}
else if (hasRole("TESTER", dtAssignedRoles))
{
//Do Other Stuff
}
如果在为管理员应用条件之后添加语句break;
,则该语句将跳出循环并进入流程的下一步。