【问题标题】:Sort object by property in JObject在 JObject 中按属性对对象进行排序
【发布时间】:2020-02-19 20:31:51
【问题描述】:

我有一个列表定义为:

    List<SensorData> tempSensorData = new List<SensorData>();

这就是我填充此列表的方式:

    tempSensorData.Add(new SensorData
    {
         Data = JObject.Parse(values[r, 4].ToString()),
         SensorGuid = values[r, 2].ToString()
    });

这是我对 SensorData 类的定义:

public class SensorData
    {
        public JObject Data { get; set; }

        public string SensorGuid { get; set; }
    }

数据属性中有一个属性叫做timestamp。我希望我的列表按该值排序。我怎样才能做到这一点? 我试过这样做:

     tempSensorData.OrderBy(o => o.Data.SelectToken("timestamp"));

但没用

这是数据中的 JSON 值:

{{
  "Record": "A",
  "timestamp": 1572987031,
  "signal_strength": "021",
  "vbatt": "3.10",
  "temperature": "21.5"
}}

【问题讨论】:

  • 你也可以提供一个示例 json 吗?
  • @Jawad 我用数据属性的 JSON 值更新了问题
  • 你知道,OrderBy() 不会改变列表本身吗?

标签: c# json list linq


【解决方案1】:

你可以试试这样的

var result = tempSensorData.OrderBy(o => o.Data["timestamp"].Value<long>());

使用JToken 的Value&lt;T&gt; 方法获取timestamp 属性的long 值,然后在OrderBy 中的Func&lt;TSource,TKey&gt; 键选择器中使用此值。

与List&lt;T&gt; 类的Sort 方法不同,OrderBy 方法返回IOrderedEnumerable 作为结果而不是更改源列表,因此您应该将返回值分配给变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2013-02-12
    • 2023-04-03
    • 1970-01-01
    • 2011-03-21
    • 2017-08-12
    • 2021-07-20
    • 2021-07-02
    相关资源
    最近更新 更多