2014-11-25 86 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