我正在尝试将下面的代码转换为速记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);
}
答案 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循环中获取先前值?”我认为没有必要这样做。