Словарь, который не создает ключ, если нет значений - PullRequest
2 голосов
/ 14 сентября 2011

У меня есть два типа User и Area.

    public class User : IEntity
        {
            public int UserId { get; set; }
            public string Username { get; set; }
            public int AreaId { get; set; }
            public string CreatedByUserName { get; set; }
            public DateTime CreatedDateTime { get; set; }
            public string LastModifiedByUserName { get; set; }
            public DateTime? LastModifiedDateTime { get; set; }


        }

        public class Area : IEntity
            {
                public virtual int Id { get; set; }
                public virtual string Name { get; set; }
                public virtual int DefaultAdminId { get; set; }
                public string CreatedByUserName { get; set; }
                public DateTime CreatedDateTime { get; set; }
                public string LastModifiedByUserName { get; set; }
                public DateTime? LastModifiedDateTime { get; set; }

                //Navigation properties
                public virtual ICollection<User> Users { get; set; }
        }

Area может содержать целую группу Users.Я хотел создать словарь, в котором имя Area является ключом, и каждый ключ будет содержать Users в этом Area для значений ключа.

Так что это было достигнуто в ответена другой мой вопрос, используя:

var dictionary = Areas.ToDictionary(s => s.Name, s => s.Users.Where(c => c.AreaId == s.Id));

Это замечательно, но если Area не содержит Users, он все равно помещается в словарь, а это не то, что я хочу.

Может, кто-нибудь подскажет, как бы я пропустил ключи Areas, которые не содержат Users?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Вы можете отфильтровать Areas перед отправкой в ​​словарь.

var dictionary = Areas.Where(s => s.Users.Any()).ToDictionary...
0 голосов
/ 14 сентября 2011

Для областей очень странно иметь пользователей, которые не совпадают с AreaId, который их содержит, но тем не менее:

   var usersByArea = (from area in areas
                      let areaUsers = area.Users.Where(u => u.AreaId == area.Id).ToList()
                      where areaUsers.Count > 0
                      select new
                      {
                          Name = area.Name,
                          Users = areaUsers
                      }).ToDictionary(a => a.Name, a => a.Users);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...