不能应用遍历数据流的条件

本文关键字:条件 数据流 遍历 应用 不能 | 更新日期: 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;,则该语句将跳出循环并进入流程的下一步。