1

我有一个查找,其中包含优先级和组的主列表。此外,一个包含用户所在组的列表ILookup<int, string>, List<string>。我想将 List 与 ILookup 进行比较,并返回与 List 中的组匹配的 IGrouping。然后最终获得具有更高优先级的 IGrouping(例如:返回 6 而不是 3)。

我的问题是 List 和 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 回答