Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用linq将列表与查找进行比较?_.net_Linq_List_Lookup - Fatal编程技术网

.net 如何使用linq将列表与查找进行比较?

.net 如何使用linq将列表与查找进行比较?,.net,linq,list,lookup,.net,Linq,List,Lookup,我有一个包含优先级和组的主列表的查找。此外,还有一个包含用户所在组的列表。我知道了,名单。我想将列表与ILookup进行比较,并返回与列表中的组匹配的IGroupings。最后得到优先级更高的iGroup,ex:返回6,而不是3 我的问题是列表和ILookup的实际比较。似乎我必须使用for循环。但我想我只是还没有找到正确的Linq语句 下面是我尝试过的 List<string> groupsOfUser = whatGroupsUserBelongTo();

我有一个包含优先级和组的主列表的查找。此外,还有一个包含用户所在组的列表。我知道了,名单。我想将列表与ILookup进行比较,并返回与列表中的组匹配的IGroupings。最后得到优先级更高的iGroup,ex:返回6,而不是3

我的问题是列表和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是字典。下面的代码可以工作,但使用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();

        }

我不确定,但这应该起到你的作用:

return mapADToRole.Where(item => item.Value.Any(groupsOfUser.Contains))
                  .OrderBy(item => item.Key)
                  .SelectMany(item => item.Value)
                  .FirstOrDefault();

查看类/接口定义会很有帮助。您是否考虑intersect方法?我不确定我是否理解正确。@UfukHacıoğulları:请看。@Igbyregman:我不知道我的签名没有显示。@JasonDown:希望编辑会有帮助: