2012-05-04 8 views
1

私は、優先レベルとグループのマスターリストを持つLookupを持っています。また、ユーザーがグループを持つリストはILookup<int, string>, List<string>です。 ListをILookupと比較し、リスト内のグループに一致するIGroupingを返したいと思います。最終的にIGroupingをより高い優先度で取得します(例:3を返します)。linqを使用してリストをルックアップと比較するにはどうすればよいですか?

私の問題は、実際のリストとILookupの比較です。私はfor-loopを使わなければならないかもしれないようです。しかし、私はちょうど正しい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(); 

     } 
+0

クラス/インタフェースの定義を見て参考になります。 –

+0

交差法を考えていますか? http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx私は正しく理解しているか分からない。 –

+0

@UfukHacıoğulları:見てください。 – dotnetN00b

答えて

0

私はわからないが、これはあなたの関数が何を行う必要があります。

return mapADToRole.Where(item => item.Value.Any(groupsOfUser.Contains)) 
        .OrderBy(item => item.Key) 
        .SelectMany(item => item.Value) 
        .FirstOrDefault(); 
関連する問題