2009-08-08 19 views
7

Tôi muốn chuyển đổi một danh sách các thuộc tính của người sử dụng vào chuỗi mảng (đối với máy thu json) như:Làm thế nào để có được kết quả LINQ như mảng chuỗi?

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) 

Kết quả là một mảng có tên là lĩnh vực

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

nhưng tôi muốn nó được mảng mảng của các chuỗi đơn giản như:

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

Làm thế nào để truyền kết quả LINQ vào mảng chuỗi?

Trả lời

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

Ngoài ra, bạn có thể sử dụng cú pháp lambda:

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

cảm ơn, cả hai đề xuất của bạn đều hoạt động tốt :) Dù sao, tôi đã thử một mảng chuỗi như vậy trước đây, nhưng kết thúc với một số lỗi chỉ mục lạ. Cùng với mã của bạn, sau đó tôi nhận ra rằng nguồn dữ liệu của tôi đã trả về đối tượng IQueryable là vấn đề - users.ToList() đã giải quyết vấn đề này. Dù sao, câu trả lời của bạn là hữu ích để có được điều này. Cảm ơn. – twk

+0

FYI, giải pháp chính xác này không hoạt động đối với tôi vì tôi có các kiểu số được trộn lẫn. (Tôi gặp lỗi khi trình biên dịch không thể xác định loại mảng.) Nhưng tôi đã sử dụng "đối tượng mới []" và điều này giải quyết được vấn đề của tôi. – mpontillo

+0

@Mike: Vâng, đó là lý do tại sao tôi đã gọi '. ToString()' trên 'user.Id' mà tôi giả định là một số nguyên. Để 'new []' hoạt động, trình biên dịch có thể suy ra kiểu mảng từ các đối tượng được truyền cho nó. Nếu các kiểu của chúng không tương thích, trình biên dịch sẽ phàn nàn. –

0

Tôi đã sử dụng một IQueryable như là điểm khởi đầu của việc tạo ra một mảng các giá trị, không phải là một List<>, nhưng trong cả hai trường hợp, bạn có thể serialise mảng đối tượng ẩn danh, thay vì mảng chuỗi, để nhận được cùng một kết quả mà không truyền giá trị cho các chuỗi.:

ví dụ:

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

Trong trường hợp của tôi, tôi cũng đã sử dụng kết quả client-side với jQuery dataTable, vì vậy kết quả cần phải được bọc trong một đối tượng ẩn danh (với tên thuộc tính aadata).

ví dụ:

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

Hy vọng rằng điều này sẽ giúp những người khác mà tìm câu hỏi này tìm kiếm dataTable phiên bản cụ thể của vấn đề này (như tôi đã).

Các vấn đề liên quan