Как получить результат linq как строковый массив? - PullRequest
7 голосов
/ 08 августа 2009

Я хотел бы преобразовать список свойств пользователя в массив строк (для приемника 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 ]

17 голосов
/ 08 августа 2009
var jsonData = from user in users
               select new[] { user.Id.ToString(),
                              user.Person.Lastname,
                              user.Person.Firstname };

Кроме того, вы можете использовать лямбда-синтаксис:

var jsonData = users.Select(user => new[] { user.Id.ToString(),
                                            user.Person.Lastname,
                                            user.Person.Firstname });
0 голосов
/ 10 марта 2015

Я использовал IQueryable в качестве начальной точки для создания массива значений, а не List<>, но в любом случае вы можете сериализовать массив анонимных объектов вместо массива строк, чтобы получить тот же результат без приведения значений к строкам .:

, например

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

В моем случае я также использовал результат на стороне клиента с jQuery dataTable, поэтому результат нужно было обернуть в другой анонимный объект (с именем свойства aadata).

, например

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

Надеюсь, это поможет другим, кто найдет этот вопрос, ищет dataTable конкретную версию этой проблемы (как я).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...