【问题标题】:How to get linq result as string array?如何将linq结果作为字符串数组?
【发布时间】:2009-08-08 12:32:30
【问题描述】:

我想将用户属性列表转换为字符串数组(用于 json 接收器),例如:

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)

结果是一个名为fields的数组

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

但我希望它是纯字符串数组的数组,例如:

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

如何将 linq 结果转换为字符串数组?

【问题讨论】:

    标签: linq arrays json


    【解决方案1】:
    var jsonData = from user in users
                   select new[] { user.Id.ToString(),
                                  user.Person.Lastname,
                                  user.Person.Firstname };
    

    或者,您可以使用 lambda 语法:

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

    【讨论】:

    • 谢谢,您的两个建议都运行良好 :) 无论如何,我之前尝试过这样的字符串数组转换,但完成时出现了一些奇怪的索引错误。您的代码也是如此,然后我意识到我的数据源正在返回 IQueryable 对象,这是问题所在 - users.ToList() 解决了这个问题。无论如何,你的回答有助于得到这个。谢谢。
    • 仅供参考,这个确切的解决方案对我不起作用,因为我混合了数字类型。(我收到一个错误,说编译器无法确定数组的类型。)但我使用了“新对象[]”,这解决了我的问题。
    • @Mike:是的,这正是我在user.Id 上调用.ToString() 的原因,我认为它是一个整数。要使new[] 工作,编译器应该能够从传递给它的对象中推断出数组的类型。如果它们的类型不兼容,编译器就会抱怨。
    • 好点;我错过了。就我而言,我必须将数据传递到 DataSet 中,并且我希望它采用原始格式(而不是字符串)。所以我只是想确保人们知道“选择新对象[] { ... }”是一个选项。
    • 当我尝试使用 ToString() The array type 'System.Object[]' cannot be initialized in a query result. Consider using 'System.Collections.Generic.List1[System.Object]' 时出现此错误。`
    【解决方案2】:

    我使用IQueryable 作为创建值数组的起点,而不是List&lt;&gt;,但无论哪种情况,您都可以序列化一个匿名对象数组而不是字符串数组,以获得相同的结果没有将值转换为字符串。:

    例如

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

    在我的实例中,我还使用带有 jQ​​uery dataTable 的结果客户端,因此需要将结果包装在另一个匿名对象中(属性名称为 aadata)。

    例如

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

    希望这将帮助其他发现此问题的人寻找 dataTable 此问题的特定版本(就像我一样)。

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 2021-07-23
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多