2014-07-19 2 views
0

트리보기로 표시 할 레코드 목록이 있습니다.이 구조는 이와 같습니다.트리 뷰의 계층 적 목록 변환

public class Account 
{ 
    public string ac_cd { get; set; } 
    public string ac_name { get; set; } 
    public string ac_parent_cd { get; set; } 
    public string ac_nature { get; set; } 
} 

나는 내가 다음과 같은 항목을 포함하는 목록,

ac_cd = "01", ac_name = "현금", ac_parent_cd = "널"이 가정, 계층 적 구조로이를 변환 할 , ac_nature = "자산",

ac_cd = "02", ac_name = "공급", ac_parent_cd = "널", ac_nature = "자산",

ac_cd = "01.01", ac_name = "ACME 사 현금 ", ac_parent_cd ="01 ", ac_nature ="자산 ",

ac_cd = "02.01", ac_name = "ACME 사 공급", ac_parent_cd = "02", ac_nature = "비용",

ac_cd = "02.01.01", ac_name = "ACME 사 사무용품", ac_parent_cd = = "비용", "02.01", ac_nature, 나는이 같은 계층 적 목록에 이러한 항목을 변환 할

,

01-현금

--- 01.01 - ACME 사 현금

02- 소모품

--- 02.01 - ACME 사

이 ------ 02.01.01 - ACME 사 사무실이있는 계정 수준의 많은 숫자가있을 수 있습니다

을 용품. 지금까지의 코드는 자식 계정을 단일 레벨로 만들 수 있습니다. 다음은 계층 적 모델의 POCO입니다.

public class AccountTree 
{ 
    public string ac_info { get; set; } 
    public List<ChildAccount> ac_child { get; set; } 
} 

public class ChildAccount 
{ 
    public string ac_info { get; set; } 
} 

그리고 여기에 내 코드가 있습니다.

List<Account> accountList = new List<Account>(); 
     accountList.Add(new Account { ac_cd = "01", ac_name = "Cash", ac_parent_cd = "", ac_nature = "Asset" }); 
     accountList.Add(new Account { ac_cd = "01.01", ac_name = "Abc Cash", ac_parent_cd = "01", ac_nature = "Asset" }); 
     accountList.Add(new Account { ac_cd = "01.02", ac_name = "Xyz Cash", ac_parent_cd = "01", ac_nature = "Asset" }); 

     List<AccountTree> targetAccountList = new List<AccountTree>(); 
     List<ChildAccount> childAccountList = new List<ChildAccount>(); 

     foreach (var childAccountGrouping in accountList.GroupBy(o => new { o.ac_parent_cd })) 
     { 
      if (childAccountGrouping.Key.ac_parent_cd == "") 
      { 
       continue; 
      } 

      var childAccounts = childAccountGrouping.ToList(); 

      foreach (var childAccount in childAccounts) 
      { 
       childAccountList.Add(new ChildAccount { ac_info = childAccount.ac_cd + childAccount.ac_name + childAccount.ac_nature }); 
      } 

      var parentAccount = (from p in accountList 
           where p.ac_cd == childAccountGrouping.Key.ac_parent_cd 
           select p).Single(); 

      AccountTree accountTree = new AccountTree 
      { 
       ac_info = parentAccount.ac_cd + parentAccount.ac_name + parentAccount.ac_nature, 
       ac_child = childAccountList 
      }; 
      targetAccountList.Add(accountTree); 
     } 

저는 이것을 크게 변경해야 할 것입니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

난 그냥 같은 계정 클래스를 변경합니다 :

public class Account 
{ 
    public string ac_cd { get; set; } 
    public string ac_name { get; set; } 
    public Account ac_parent_cd { get; set; } 
    public List<Account> ac_children_cd { get; set; } 
    public string ac_nature { get; set; } 
} 

지금 당신이 모든 요소를 ​​쉽게 부모에 대한 접근과 아이들이