2013-05-02 15 views
0
之間缺少信息

我怎樣才能找到找到2所列出

生成列表

private static IEnumerable<User> GetSomeUsers() 
     { 
      var mikesGroups = new List<string> { "Group1", "Group2" }; 
      var mike = new User { UserName = "Mike", MemberOf = mikesGroups }; 

      var davidsGroups = new List<string> { "Group3", "Group1" }; 
      var david = new User { UserName = "David", MemberOf = davidsGroups }; 

      return new List<User> { mike, david }; 
     } 


     private static IEnumerable<Group> getGroups() 
     { 
      var group1Users = new List<string> { "Mike", "David", "Kim" }; 
      var group1 = new Group { Name = "Group1", Members = group1Users }; 

      var group2Users = new List<string> { "Mike", "David","Kim" }; 
      var group2 = new Group { Name = "Group2", Members = group2Users }; 

      return new List<Group> { group1, group2 }; 
     } 

實體的代碼所缺少2個不同列表之間的信息:

public class User 
    { 
     public string UserName { get; set; } 
     public IList<string> MemberOf { get; set; } // list of group names 
    } 

public class Group 
{ 
    public string Name { get; set; } 
    public IList<string> Members { get; set; } // list of username 
} 

結果應該是2列表(缺少組和缺少用戶)

Group3在組列表中缺少並且鏈接到用戶"David" Kim缺少在用戶列表中並鏈接到group1group2

2字典必須返回答案=缺失值= foundIn

Dictionary<string,IList<string>> missingUsers; 
Item 1 > key="Kim", Value={"Group1","Group2"} 

Dictionary<string,IList<string>> missingGroup; 
item 1 > Key="Group3",{"David"} 

編輯=>

我管理得到所有丟失但未鏈接的列表(字典中所有值的列表)

var missingGroups = users.SelectMany(g => g.MemberOf).ToList().Except(groups.Select(w => w.Name)); 
var missingUsers= groups.SelectMany(g => g.Members).ToList().Except(users.Select(u => u.UserName)); 
+5

你試過了什麼? – Thomas 2013-05-02 13:34:16

+0

這就是問題所在,我在邏輯部分 – Maro 2013-05-02 13:46:35

+0

中被阻止,但以下內容不起作用 'users.Select(x => x.MemberOf)。除(groups.Select(g => g 。名稱 – Maro 2013-05-02 14:00:43

回答

0

好吧,我找到了解決方案。請隨時糾正,如果你發現更好的表現更好。

 var missingGroup = 
     users.ToDictionary(user => user.UserName, user => 
      user.MemberOf.Except(groups.Select(w => w.Name))) 
      .Where(f => f.Value != null && f.Value.Count() > 0) 
      .ToDictionary(x => x.Key, x => x.Value);