3

我正在尝试将下面的代码转换为速记 linq,但不确定是否可能。有没有更优雅的方法可以使用 Linq 做到这一点?复杂之处在于它是一个嵌套循环,用于拆分 AllowedRoles 并检查每个是否为 IsUserInRole。

   bool allowed = RoleManager.IsUserUnrestricted(userId);
    if (!allowed)
    {
        foreach (var item in element.AllowedRoles.Split(','))
        {
            if (roleManager.IsUserInRole(userId, item.Trim()))
            {
                allowed = true;
                break;
            }
        }
    }

    if (allowed)
    {
        AddWidget(element.Name);
    }
4

3 回答 3

3

尝试这个:

if (RoleManager.IsUserUnrestricted(userId)
||  element.AllowedRoles.Split(',')
           .Any(item => roleManager.IsUserInRole(userId, item.Trim()))) {
    ...
}

这个想法是使用 LINQ 的Any函数来查找第一个匹配项而无需循环。

于 2012-08-06T03:54:34.140 回答
1

像这样的东西?

if(RoleManager.IsUserUnrestricted(userId) || element.AllowedRoles.Split(',').Any(r=> roleManager.IsUserInRole(userId,r.Trim()))
{
        AddWidget(element.Name);
}
于 2012-08-06T03:55:22.283 回答
1

你可以使用这样的东西:

element.AllowedRoles.Split(',').Any(r => roleManager.IsUserInRole(userId, r.Trim())) 

顺便说一句,我没有看到嵌套循环,您发布的代码中只有一个循环。你有元素的集合吗?另外,为什么您的问题的标题是“在 linq 循环中获取先前的值?” 我认为在任何地方都不需要这样做。

于 2012-08-06T03:56:13.063 回答