1

優先度とグループのマスターリストがあるルックアップがあります。また、ユーザーが所属するグループを含むリストILookup<int, string>, List<string>。リストをILookupと比較して、リスト内のグループに一致するIGroupingsを返したいのですが。次に、最終的に優先度の高いIGroupingを取得します(例:3ではなく6を返します)。

私の問題は、リストとILookupの実際の比較にあります。forループを使用する必要があるようです。しかし、私はまだ正しいLinqステートメントを見つけていないと思います。

私が以下で試したこと。

        List<string> groupsOfUser = whatGroupsUserBelongTo();
        ILookup<int, string> loginGroups = mapADToRole.SelectMany(ad => ad.Value
                                                                          .Select(grp => new {ad.Key, Value = grp}))
                                                      .ToLookup(adLkUp => adLkUp.Key, adLkUp => adLkUp.Value);


        var blah = loginGroups.Where(adGrp => adGrp.SelectMany(ad => groupsOfUser.Contains(ad)));

アップデート:

mapADToRoleはDictionary<int, List<string>>です。以下のコードは機能しますが、foreachループを使用しています。

        public static string getWindowsGroup()
        {
            List<string> groupsOfUser = whatGroupsUserBelongTo();
            ILookup<int, string> loginGroups = mapADToRole.SelectMany(ad => ad.Value
                                                                              .Select(grp => new {ad.Key, Value = grp}))
                                                          .ToLookup(adLkUp => adLkUp.Key, adLkUp => adLkUp.Value);



            List<IGrouping<int, string>> foo = new List<IGrouping<int, string>>();
            foreach (IGrouping<int, string> loginGroup in loginGroups)
            {
                foreach (var blah in loginGroup)
                {
                    if (groupsOfUser.Contains(blah))
                    {
                        foo.Add(loginGroup);
                    }
                }
            }

            var foobar = foo.Max(grp => grp.Key);
            return loginGroups[foobar].FirstOrDefault();

        }
4

1 に答える 1

0

よくわかりませんが、これで関数の機能が実行されるはずです。

return mapADToRole.Where(item => item.Value.Any(groupsOfUser.Contains))
                  .OrderBy(item => item.Key)
                  .SelectMany(item => item.Value)
                  .FirstOrDefault();
于 2012-05-04T18:02:34.513 に答える