2014-01-14 104 views
1

有点难以解释,但在这里不用...(使用.NET 4.5,C#)创建一个从嵌套列表阵列

我们目前拥有的项目列表(按照下面的“用户”),其中包含一个列对象列表。即。

public class TableColumn 
{ 
    public string ColumnHeader { get; set; } 
    public string ColumnValue { get; set; } 
    public int ColumnWidth { get; set; } 
} 

public class User 
{ 
    public string Username { get; set; } 
    public string Address1 { get; set; } 
    public int Age { get; set; } 

    public List<TableColumn> Columns { get; set; } 
} 

我们正在使用JQGrid,我们需要传回Json。

没有我们将使用嵌套列表: -

var aaData = PatList.Select(d => new string[] { 
       d.Username , 
       d.Address1 , 
       d.Age}).ToArray(); 

return Json(new 
     { 
      sEcho = param.sEcho, 
      aaData = aaData, 
      iTotalRecords = Convert.ToInt32(totalRowsCount.Value), 
      iTotalDisplayRecords = Convert.ToInt32(filteredRowsCount.Value) 
     }, JsonRequestBehavior.AllowGet); 

伟大的工程。

我们正在努力的是如何添加列的列表。

var aaData = PatList.Select(d => new string[] { 
       d.Username , 
       d.Address1 , 
       d.Age, 
       d.Columns.forEach(????)}).ToArray(); 

所以这些列与用户相关。

希望这是有道理的。任何援助将不胜感激。

+0

如果您需要以JSON格式输出数据(即您的用户列表及其关联的对象图),则可能需要考虑使用JSON序列化程序。看看[.NET 4有一个内置的JSON序列化/反序列化?](http://stackoverflow.com/questions/3275863/does-net-4-have-a-built-in-json-serializer -deserializer)。 –

回答

1

你可以做这样的事情:

var aaData = PatList.Select(d => (new string[] { 
     d.Username, 
     d.Address1, 
     d.Age.ToString() 
    }.Union(d.Columns.Select(c => c.ColumnHeader))).ToArray() 
).ToArray(); 

这生成每个UserPatListUsername, Address1, Age & all ColumnHeaders的数组。

+0

谢谢你这工作,但是,它删除了许多空的列,如果我代表一个表内,ID仍然需要。 (d =>(new string [] { d.Username, d.Address1, d.Age.ToString() } .Concat()函数使用concat而不是union var get d.Columns.Select(c => c.ColumnHeader)))。ToArray() ).ToArray(); – Simon

+0

是的,'联合'删除重复/空头。 – Raidri