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())) 

ところで、ネストされたループは表示されません。投稿したコードにはループが1つしかありません。要素のコレクションはありますか?また、質問のタイトルが「linqループで以前の値を取得する」であるのはなぜですか?これはどこにも必要ないと思います。

于 2012-08-06T03:56:13.063 に答える