2009-08-08 6 views
7

Ich möchte eine Liste von Benutzereigenschaften in Strings Array (für json Empfänger) wie konvertieren:Wie bekomme ich linq result als String Array?

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) 

Das Ergebnis ist ein benanntes Array Felder

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

aber ich würde es sein mag das Array von Arrays von einfachen Zeichenfolgen wie:

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

Wie zu Linsets Ergebnis zu Strings Array zu werfen?

Antwort

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

Alternativ kann die Lambda-Syntax:

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

danke, beide Ihre Vorschläge funktionieren gut :) Wie auch immer, ich habe versucht, eine solche Strings Array vor, aber mit einigen seltsamen Indexfehler beendet. Gleiches war mit deinem Code, dann erkannte ich, dass meine Datenquelle das IQueryable-Objekt zurückgab, was das Problem war - users.ToList() löste dies. Wie auch immer, Ihre Antwort war hilfreich, um dies zu bekommen. Vielen Dank. – twk

+0

FYI, diese genaue Lösung funktionierte nicht für mich, da ich numerische Typen eingemischt hatte. (Ich habe eine Fehlermeldung erhalten, dass der Compiler den Typ des Arrays nicht bestimmen konnte.) Aber ich habe "new object []" und Das hat mein Problem gelöst. – mpontillo

+0

@Mike: Ja, genau deshalb habe ich '.ToString()' auf 'user.Id' aufgerufen, was ich als Integer angenommen habe. Damit 'new []' funktioniert, sollte der Compiler aus den ihm übergebenen Objekten den Typ des Arrays ableiten können. Wenn ihre Typen nicht kompatibel sind, wird sich der Compiler beschweren. –

0

I war ein IQueryable als Ausgangspunkt zur Erstellung eines Arrays von Werten verwendet wird, kein List<>, aber in jedem Fall kann man serialise ein anonymes Objekt-Array anstelle eines String-Arrays, um das gleiche Ergebnis zu erhalten ohne die Werte in Strings umzuwandeln.:

eg

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

In meinem Fall wurde ich auch mit dem Ergebnis Client-Seite mit jQuery dataTable, so dass das Ergebnis in einem anderen anonymen Objekt gewickelt werden muß (mit dem Eigenschaftsnamen aadata).

z.B.

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

Hoffentlich wird dies anderen helfen, die diese Frage für dataTable bestimmte Version dieses Problems suchen finden (wie ich).

Verwandte Themen