優先度とグループのマスターリストがあるルックアップがあります。また、ユーザーが所属するグループを含むリスト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();
}