无法应用通过datarow循环的条件

时间:2011-09-22 14:31:21

标签: c# asp.net visual-studio ado.net datarow

我在datarow中应用了循环,我需要检查如果用户角色是admin,我需要应用一些条件。

现在,用户可以拥有多个角色,例如User Smith有3个角色:Admin,Developer和Tester。因此,史密斯条件成真。对Jane而言,她有4个角色:开发人员,测试员,分析师和普通用户,因此对于简,条件变为假(因为她不是管理员)

现在我编写了代码

// 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);
}

问题:对于史密斯而言,条件失败,因为虽然他是管理员,但他也是开发人员和测试人员。因此应用了2个条件;一个用于管理员,另一个用于非管理员(dev + tester)

因此我想,我需要检查所有行,如果管理员有一个角色,则应该满足条件。但我不知道怎么做?

请指导。感谢

2 个答案:

答案 0 :(得分:1)

如果在为管理员应用条件后添加语句break;,则会跳出循环并转到该过程的下一步。

答案 1 :(得分:1)

您可以使用此辅助函数来确定用户是否具有特定角色...

    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;
    }

编辑:或与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
        }