1
我有一個具有優先級和組的主列表的查找。此外,列表中包含用戶所在的組。ILookup<int, string>, List<string>
。我想將列表與ILookup進行比較,並返回與列表中的組匹配的IGroupings。然後最後得到具有更高優先級的IGrouping(例如:返回6而不是3)。如何使用linq將列表與查找進行比較?
我的問題是與列表和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)));
UPDATE:
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();
}
這將是有益的,看看類/接口的定義。 –
你在想相交法嗎? http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx我不知道我是否正確理解。 –
@UfukHacıoğulları:請看。 – dotnetN00b