2014-11-25 78 views
2

在這裏我有一個數據錶轉換json的問題。這是我的課叫做SearchCollection從數據表Json數據

public int CategoryId { get; set; } 
public string CategoryName { get; set; } 
public int ClassGroupId { get; set; } 
public string ClassName { get; set; } 
public int ClassNumber { get; set; } 
public int BookTypeId { get; set; } 
public string BookType { get; set; } 

我收集了從存儲過程數據和推入的數據表,這就是爲什麼我使用ConvertToDatatable(),那個時候,我得到了一個數據表包含3個表數據

static DataTable ConvertToDatatable(IEnumerable<SearchCollection> list)  
{ 

    var dt = new DataTable(); 

    dt.Columns.Add("CategoryId"); 
    dt.Columns.Add("CategoryName"); 
    dt.Columns.Add("ClassGroupId"); 
    dt.Columns.Add("ClassName"); 
    dt.Columns.Add("ClassNumber"); 
    dt.Columns.Add("BookTypeId"); 
    dt.Columns.Add("BookType"); 

    foreach (var item in list) 
    { 
     var row = dt.NewRow(); 

     row["CategoryId"] = item.CategoryId; 
     row["CategoryName"] = item.CategoryName; 
     row["ClassGroupId"] = item.ClassGroupId; 
     row["ClassName"] = item.ClassName; 
     row["ClassNumber"] = item.ClassNumber; 
     row["BookTypeId"] = item.BookTypeId; 
     row["BookType"] = item.BookType; 
     dt.Rows.Add(row); 
    } 
    return dt; 
} 

這包含3個表格數據。

所以..這是試圖對數據進行分組,但是這裏得到的答案類似頂部類別中顯示書本類型和內部書本類型顯示類名稱列表,但我想要3組數據 category {}, booktype {},classnames {}

var result = rows.GroupBy(r => new { x = r["CategoryId"], y = r["CategoryName"] }).Select(g => new 
{ 
    CategoryId = g.Key.x, 
    CategoryName = g.Key.y, 
    BookTypes = g.GroupBy(r => new { h = r["BookTypeId"], i = r["BookType"] }).Select(g1 => new 
    { 
     BookTypeId = g1.Key.h, 
     BookType = g1.Key.i, 
     ClassNames = g1.Select(r => new 
     { 
      ClassGroupId = r["ClassGroupId"], 
      ClassName = r["ClassName"], 
      ClassNumber = r["ClassNumber"] 
     }), 
    }), 
}); 



    Rusult 
This is my result 
{ CategoryId:1 CategoryName:CD  ClassGroupId:15  ClassName:I  ClassNumber:1 BookTypeId:1 BookType:General CD} 
{ CategoryId:2 CategoryName:DVD  ClassGroupId:16 ClassName:II ClassNumber:2 BookTypeId:2 BookType:General DVD} 
{ CategoryId:3 CategoryName:Book ClassGroupId:17 ClassName:III ClassNumber:3 BookTypeId:3 BookType:General Books} 

But i want the result like this 

+ Category={ CategoryId:1 CategoryName:CD  
    CategoryId:2 CategoryName:DVD  
    CategoryId:3 CategoryName:Book } 

    ClassGroup={ClassGroupId:15 ClassName:I  ClassNumber:1 
    ClassGroupId:16  ClassName:II ClassNumber:2 
    ClassGroupId:17  ClassName:III ClassNumber:3} 

BookType{ BookTypeId:1 BookType:General CD 
    BookTypeId:2 BookType:General DVD 
    BookTypeId:3 BookType:General Books 
} 

這裏我的結果是booktype是在booktype下的category和classname。但我想要的結果就像單個JSON中的3組記錄,任何一個幫助就像類別分組集合,類分組集合和書籍類型集合在單個JSON數據中。

+0

您可以編輯您的問題,爲您提供有在數據表和JSON結果你想從數據創建數據的例子嗎?我不清楚你在問什麼。 – 2014-11-25 16:18:52

+0

我已經更新了我的問題可以ü請檢查.. – 2014-11-27 04:10:05

回答

0

這是你要找的嗎?

var result = new 
    { 
     Category = rows 
      .GroupBy(r => new 
      { 
       x = r["CategoryId"], 
       y = r["CategoryName"] 
      }) 
      .Select(g => new 
      { 
       CategoryId = g.Key.x, 
       CategoryName = g.Key.y 
      }), 
     ClassGroup = rows 
      .GroupBy(r => new 
      { 
       x = r["ClassGroupId"], 
       y = r["ClassName"], 
       z = r["ClassNumber"] 
      }) 
      .Select(g => new 
      { 
       ClassGroupId = g.Key.x, 
       ClassName = g.Key.y, 
       ClassNumber = g.Key.z 
      }), 
     BookType = rows 
      .GroupBy(r => new 
      { 
       x = r["BookTypeId"], 
       y = r["BookType"] 
      }) 
      .Select(g => new 
      { 
       BookTypeId = g.Key.x, 
       BookType = g.Key.y 
      }) 
    }; 

小提琴:https://dotnetfiddle.net/h9qXqc

+0

是的,..謝謝布萊恩羅傑斯, – 2014-11-27 06:02:16