获取linq循环中的先前值?

时间:2012-08-06 03:48:05

标签: c# .net linq c#-4.0

我正在尝试将下面的代码转换为速记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);
    }

3 个答案:

答案 0 :(得分:3)

试试这个:

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

我们的想法是使用LINQ的Any函数来查找没有循环的第一个匹配项。

答案 1 :(得分:1)

这样的事情?

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

答案 2 :(得分:1)

您可以使用以下内容:

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

BTW,我没有看到嵌套循环,你发布的代码中只有一个循环。你有一系列元素吗?另外,为什么你的问题的标题是“在linq循环中获取先前值?”我认为没有必要这样做。