2013-05-02 2 views
0

Как я могу найти недостающую информацию между 2 различными списками вНайти недостающую информацию между 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 }; 
     } 

сущности:

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 отсутствует в списке пользователей и связанные с group1 и group2

2 словари должны быть возвращены Key = отсутствует значение = 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

+0

В этом проблема, я заблокирован в логической части – Maro

+0

, но пока не работает 'users.Select (x => x.MemberOf). Кроме (groups.Select (g => g .Имя – Maro

ответ

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); 
Смежные вопросы