2009-08-08 20 views
7

ben gibi (json alıcı için) dizeleri diziye Kullanıcı özelliklerinin bir listesini dönüştürmek istiyorum:Linq sonucu dizi dizisi olarak nasıl edinilir?

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) 

sonuç bir dizi adında alanlar

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

olduğunu ama olmak istiyorum gibi düz diziler dizileri dizisi:

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

Linq sonucu dizeler dizisi nasıl kullanılır?

cevap

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

Alternatif olarak, lamda sözdizimini kullanın:

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

sayesinde hem önerileri Böyle bir dize dizisi bazı garip endeks hataları ile daha önce dökme, ama bitmiş çalışıyordum, neyse iyi :) çalışır. Aynı kodunuzla aynıydı, sonra veri kaynağımın sorun olan IQueryable nesnesini döndürdüğünü fark ettim - users.ToList() bunu çözdü. Neyse, cevabınız bunu elde etmek için yardımcı oldu. Teşekkürler. – twk

+0

FYI, bu tam çözüm benim için işe yaramadı çünkü sayısal türlerim karışmıştı. (Derleyicinin dizinin türünü belirleyemediğini belirten bir hata aldım.) Ancak "yeni nesne []" yi kullandım ve Bu benim problemimi çözdü. – mpontillo

+0

@Mike: Evet, işte tam da bu yüzden tamsayı olarak kabul ettiğim user.Id'de .ToString() 'yi aradım. Çalışmak için yeni [] 'için, derleyici dizinin türüne geçirilen nesnelerden türetebilmelidir. Türleri uyumlu değilse, derleyici şikayette bulunacaktır. –

0

I değerler dizisini, bir List<> yaratma başlangıç ​​noktası olarak bir IQueryable kullanılarak, ama her iki durumda da tefrika olabilir bir dize dizisi yerine bir anonim nesne dizisi, aynı sonucu elde etmek için değerini dizelerine eklemeden, örneğin:

Sonuç (özelliği adı aadata ile) başka bir anonim nesne sarılmış gereken çok zaman durumda

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

Ayrıca, jQuery dataTable ile sonuç istemci tarafı kullanıyordu.

örn. (Ben gibi)

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

Umarım bu, bu sorunun dataTable spesifik sürümü arayan bu soruyu bulmak başkalarına yardımcı olacaktır.

İlgili konular