2011-09-14 64 views
2

我有UserArea兩種類型。如果沒有值,字典不會創建密鑰

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名稱是密鑰,每個密鑰將在此Area中包含Users以獲取密鑰的值。

所以這是在回答中使用,以實現我的問題另一個問題:

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

這是偉大的,但如果Area不包含任何Users它仍然是放進字典這不是什麼我想要。

難道有人請給我一些想法,我將如何離開鑰匙Areas哪些不包含任何Users

回答

4

您可以在發送到字典之前過濾Areas

var dictionary = Areas.Where(s => s.Users.Any()).ToDictionary... 
+0

大非常乾淨的解決方案! – AnonyMouse

0

這是非常奇怪的領域讓用戶至極不匹配包含它們但仍然在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); 
相關問題