트리보기로 표시 할 레코드 목록이 있습니다.이 구조는 이와 같습니다.트리 뷰의 계층 적 목록 변환
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);
}
저는 이것을 크게 변경해야 할 것입니다. 어떤 도움을 주시면 감사하겠습니다.