2011-09-14 17 views
2

私はUserAreaの2種類があります。値がない場合にキーを作成しない辞書

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; } 
     } 

AreaUsersの全体の束を含めることができます。 Areaの名前がキーで、各キーにのUsersがキーの値として含まれている辞書を作成したいと考えていました。 Areaは、それがまだものではありません辞書に入れられる任意のUsersが含まれていない場合、これは素晴らしいですが、

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

を:これは、使用して私の質問のもう一つの答えで達成された

が欲しいです。

誰かが私がどのようにUsersが含まれていないキーAreasを残しておいたらいいか分かりますか?

答えて

4

Areasをフィルタリングして辞書に送信することができます。

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

グレートきれいソリューションを! – AnonyMouse

0

領域が持っていることは非常に奇妙であるユーザーにもかかわらず、それらが含まれていますが、エリアIDが一致しないWICH:あなたはおかげでそこに持っている

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); 
関連する問題