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