如何获得linq结果作为字符串数组?

时间:2009-08-08 12:32:30

标签: linq arrays json

我想将用户属性列表转换为字符串数组(对于json接收器),如:

List<User> users = <..list of users from db...>

var jsonData = (
   from user in users
   select new { user.Id, user.Person.Lastname, user.Person.Firstname });

return Json(jsonData)

结果是一个名为fields

的数组
[{"Id":1,"Lastname":"Doe","Firstname":"John"},{"Id":2,"Lastname":"Smith","Firstname":"Adam"},...]

但我希望它是普通字符串数组的数组,如:

[["1","Doe","John"]
 ["2","Smith","Adam"], ...]

如何将linq结果转换为字符串数组?

2 个答案:

答案 0 :(得分:17)

var jsonData = from user in users
               select new[] { user.Id.ToString(),
                              user.Person.Lastname,
                              user.Person.Firstname };

或者,您可以使用lambda语法:

var jsonData = users.Select(user => new[] { user.Id.ToString(),
                                            user.Person.Lastname,
                                            user.Person.Firstname });

答案 1 :(得分:0)

我使用IQueryable作为创建值数组的起点,而不是List<>,但在任何一种情况下,您都可以将匿名对象数组而不是字符串数组序列化为获得相同的结果而不将值转换为字符串。:

e.g。

var jsonData = users.Select(user => new object[] { 
                    user.Id,
                    user.Person.Lastname,
                    user.Person.Firstname 
               });

在我的实例中,我也使用jQuery dataTable的结果客户端,因此结果需要包装在另一个匿名对象中(属性名称为aadata)。

e.g。

return Json(new { aaData = jsonData }, JsonRequestbehavior.AllowGet);

希望这会帮助其他人找到这个问题,寻找dataTable此问题的特定版本(就像我一样)。