我有一个查找,其中包含优先级和组的主列表。此外,一个包含用户所在组的列表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();
}