2016-01-20 3 views
-1

Это sturcture моего DictionaryКак добавить класс вложенный класс в словаре?

public class Company 
{ 
    public string ComID { get; set; } 
    public string ComName { get; set; } 
    public List<Dep> Dep { get; set; } 
} 
public class Dep 
{ 
    public string DepID { get; set; } 
    public string DepName { get; set; } 
    public string isDepAt { get; set; } 
    public List<User> User { get; set; } 
} 
public class User 
{ 
    public string UserID { get; set; } 
    public string UserName { get; set; } 
    public string UserTitle { get; set; } 
    public string UserExt { get; set; } 
    public string UserIsAt { get; set; } 
} 


protected void Page_Load(object sender, EventArgs e) 
{ 
    Dictionary<int, Company> dic = new Dictionary<int, Company>(); 

    DataTable data=new DataTable(); 
    //get data ... 
    //Creat User 
    //Creat Dep and add User to class 
    //Creat Company and add Dep to class 
    //Add Company to Dictionary 'dic' 
} 

После связывания данных, как я мог добавить новый User в Dictionary?

Я использую этот путь:

User _user = new User() 
    { 
     UserID = "123", 
     UserName = "John cena", 
     UserTitle = "Champian", 
     UserExt = "7777", 
     UserIsAt = "Yes" 
    }; 
dic.Where(x => x.Value.Dep.Select(y => y.DepID == "abcDep").FirstOrDefault()).FirstOrDefault().Value.Dep.Where(z => z.DepID == "abcDep").FirstOrDefault().User.Add(_user); 

есть лучший способ сделать это?

+0

Не знаете, какую помощь вы ищите. Ясно, что вы ожидаете, что элементы не будут найдены иногда (поскольку вы используете 'FirstOrDefault()'), но с другой стороны код, как показано (предположительно упрощенное/комбинированное в одной строке для пост-образца), не обрабатывает случаи, когда элемента нет. Обязательно укажите полный код с включенной обработкой «null», чтобы кто-то мог предоставить разумные рекомендации по вашему фактическому коду. –

+0

Если частые обновления внутренней коллекции, почему нельзя использовать словарь instread? например 'Dictionary ' –

ответ

0
var curDepId = "abcDep"; 
var curUser=new User() 
      { 
       UserID = "123", 
       UserName = "John cena", 
       UserTitle = "Champian", 
       UserExt = "7777", 
       UserIsAt = "Yes" 
      }; 
foreach (var d in dic) 
{ 
    var curCompany=d.Value; 
    if (curCompany == null || curCompany.Dep==null) continue; 
    var depObj = curCompany.Dep.Where(c => c.DepID == curDepId).FirstOrDefault(); 
    if (depObj != null) 
    { 
     if(depObj.User==null) 
     { 
     depObj.User=new List<User>(); 
     } 
     depObj.User.Add(curUser); 
     break; 
    } 
}