2009-08-08 10 views
7

me gustaría convertir una lista de las propiedades del usuario en cadenas de matriz (por receptor JSON) como:¿Cómo obtener el resultado de linq como una matriz de cadenas?

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) 

El resultado es un campo matriz denominada

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

pero me gustaría que fuera la matriz de matrices de cadenas simples como:

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

Cómo convertir linq result a strings array?

Respuesta

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

Alternativamente, puede utilizar la sintaxis lambda:

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

gracias, ambas propuestas funcionan bien :) De todos modos, estaba probando un molde de matriz de cadenas antes, pero terminé con algunos errores de índice extraños. Lo mismo ocurrió con su código, luego me di cuenta de que mi fuente de datos devolvía el objeto IQueryable que era el problema - users.ToList() resolvió esto. De todos modos, su respuesta fue útil para obtener esto. Gracias. – twk

+0

Para su información, esta solución exacta no funcionó para mí ya que tenía los tipos numéricos mezclados. (Recibí un error que decía que el compilador no podía determinar el tipo de la matriz). Pero utilicé "objeto nuevo []" y esto resolvió mi problema – mpontillo

+0

@Mike: Sí, es exactamente por eso que he llamado '.ToString()' en 'user.Id' que asumí que era un número entero. Para que 'new []' funcione, el compilador debería poder deducir el tipo de matriz de los objetos que se le pasan. Si sus tipos no son compatibles, el compilador se va a quejar. –

0

que estaba usando un IQueryable como el punto de partida de la creación de una matriz de valores, no un List<>, pero en cualquier caso se puede serializar una matriz de objetos anónimos, en lugar de una matriz de cadenas, para obtener el mismo resultado sin emitir valores a las cadenas.:

por ejemplo

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

En mi ejemplo, yo también estaba usando el lado del cliente resultado con jQuery dataTable, por lo que el resultado tenía que ser envuelto en otro objeto anónimo (con el nombre de propiedad aadata).

p. Ej.

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

Esperamos que esto ayudará a otros que se encuentran a esta pregunta en busca de dataTable versión específica de este problema (como yo).

Cuestiones relacionadas