2009-08-08 9 views
7

私はユーザーのプロパティのリストを(jsonレシーバ用の)文字列配列に変換したいと思う:どのように文字列配列としてlinqの結果を取得するには?

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) 

結果は配列

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

という名前だが、次のようなプレーンな文字列の配列配列:

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

linq結果を文字列配列にキャストする方法は?

答えて

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

あるいは、ラムダ構文を使用することができます同じ結果を得るために文字列配列ではなく匿名オブジェクト配列:

たとえば、同じ結果を得るために、を文字列にキャストしないでください。私の例では

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特定のバージョンを探して見つけ他人を助けるだろう。

+0

ありがとう、どちらの提案もうまくいきます:) とにかく、以前はこのような文字列配列を試していましたが、奇妙なインデックスエラーで終了しました。あなたのコードでも同じでしたが、私のデータソースが問題だったIQueryableオブジェクトを返すことに気付きました - users.ToList()はこれを解決しました。とにかく、あなたの答えはこれを得るのに役立ちました。ありがとう。 – twk

+0

私は数値型が混在していたので、この正確な解決策は私にとってはうまくいきませんでした(コンパイラが配列の型を判別できないというエラーが出ました)。しかし、私は "new object []"を使用しました。これは私の問題を解決しました。 – mpontillo

+0

@Mike:そうですね、それは私が整数であると仮定した 'user.Id'に対して' .ToString() 'を呼び出した理由です。 'new []'が機能するためには、コンパイラは渡されたオブジェクトから配列の型を推測できるはずです。型が互換性がない場合、コンパイラは不平を言うでしょう。 –

0

関連する問題