对字符串进行排序,以便我可以将它与LINQ一起使用

时间:2015-05-20 13:47:26

标签: c# linq

我有一个看起来像这样的文本字符串,它可能会更大。相同的UserID可以出现几次。

  

[{“UserID”:“400”,“username”:“john doe”,“GroupID”:“11”,“GroupName”:“Missing”,“Money”:“2300”},    {“UserID”:“500”,“username”:“jon doe”,“GroupID”:“12”,“GroupName”:“Missing”,“Money”:“2400”},    {“UserID”:“600”,“username”:“jen doe”,“GroupID”:“13”,“GroupName”:“Missing”,“Money”:“1100”},    {“UserID”:“400”,“username”:“john doe”,“GroupID”:“11”,“GroupName”:“Missing”,“Money”:“1400”}]

我想对此问题进行排序,以便LINQ对此问题如何。

类似于所有UserID的金额,UserID的金额和用户名的总和。

我应该把它放在课堂上,或者最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

  

我应该把它放在课堂上,或者最好的方法是什么?

  1. 这可能是你想要做的第一步。
  2. 下一步可能是transform the JSON到您的班级
  3. SortGroup您的搜索结果
  4. 像汇总等一样解雇您的应用程序逻辑。

答案 1 :(得分:1)

如果您要经常处理这些对象,那么我肯定会使用类来表示它们,以便更容易反序列化JSON字符串。如果没有那么你就可以快速而肮脏地滚动。无论哪种方式,我认为你将要使用Json.NET库;它会让你的生活更轻松。通过在包管理器控制台中运行此命令将其安装在项目中:

Install-Package Newtonsoft.Json

对于快速而肮脏的解决方案,给定一个名为json的字符串,您可以这样做:

Newtonsoft.Json.Linq           // Namespace
.JArray                        // Class
.Parse(json)                   // Static method to parse string into a JArray
.Select(x => new               // Select anonymous types
{
    UserId = x["UserID"],
    Username = x["username"],
    GroupId = x["GroupID"],
    GroupName = x["GroupName"],
    Money = x["Money"],
})
.GroupBy(x => x.UserId)        // Group by user id.
.ContinueWithRemainingQuery();