2014-04-22 4 views
2

DataTable에서 중첩 목록을 반환하고 싶습니다. 그래서 아래의 시나리오중첩 목록 작성 DataTable의 목록

DataTable table = new DataTable(); 
table.Columns.Add("Header", typeof(string)); 
table.Columns.Add("RowHeader", typeof(string)); 
table.Columns.Add("ItemHeader", typeof(string)); 
table.Columns.Add("Items", typeof(string)); 

table.Rows.Add("Header1", "RowHeader1", "Item Header1", "Item1, Item2, Items3"); 
table.Rows.Add("Header1", "RowHeader1", "Item Header2", "Item1, Item2, Items3"); 
table.Rows.Add("Header1", "RowHeader2", "Item Header3", "Item1, Item2, Items3"); 
table.Rows.Add("Header2", "RowHeader3", "Item Header4", "Item1, Item2, Items3"); 

주에 대한 LINQ 쿼리를 찾고 있어요 : 다음 항목은 쉼표 (,)로 delimted되어 사전에

public class HeaderClass 
    { 
    public string Header { get; set; } 
    public IEnumerable<RowHeaderClass> RowHeader{ get; set; } 
    } 

    public class RowHeaderClass 
    { 
    public string Header { get; set; } 
    public IEnumerable<RowItemsClass> RowItems{ get; set; } 
    } 

    public class RowItemsClass 
    { 
    public string Item1{ get; set; } 
    public string Item2{ get; set; } 

    } 

감사합니다.

+0

달성하려는 목표가 명확하지 않습니다. 어떤 결과를 기대합니까? – McCee

+0

'string.Split'이 (가) 당신의 친구 일 수 있습니다. – briantyler

+0

목록 을 반환하고 싶습니다. 내부는 List 로 중첩되어야합니다. Datatable의 각 행에 대해 List 의 단일 컬렉션을 만들어야합니다. – user472269

답변

1
당신의 클래스 정의가 완전하지 않는 것

가 - 당신은 ItemHeader 및 추가 항목을 보관하는 변수를 누락 된 것으로 보이지만, 당신이 제공하는 무엇을 제공, 당신의 라인을 따라 뭔가를 할 수 :

List<HeaderClass> x = (from row in table.AsEnumerable() 
     group row by row.Field<string>("Header") into hdr 
     select new HeaderClass 
     { 
      Header = hdr.First().Field<string>("Header"), 
      RowHeader = (from hdrrow in hdr 
         group hdrrow by hdrrow.Field<string>("RowHeader") into row 
         select new RowHeaderClass 
         { 
          Header = row.First().Field<string>("RowHeader"), 
          RowItems = from itemrow in row 
             select new RowItemsClass 
             { 
              Item1 = itemrow.Field<string>("Items").Split(',')[0], 
              Item2 = itemrow.Field<string>("Items").Split(',')[1] 
             } 
         }).ToList() 

     }).ToList(); 

희망이 있으면 적어도 올바른 방향으로 이동할 수 있기를 바랍니다.

+0

감사합니다. –