1

私はjson配列を持っています。要素の形式は次のようになります。

{
    "CKey": "S2_123_45_20130416105655",
    "TimeOfCall": "2013-04-17T06:00:00-04:00",
    "DestinationNumber": "123456789",
    "CallType": "X",
    "CardNumber": ""
}

配列には多くの要素がありTimeOfCall(DateTime format)ます。24 時間以内に最新の 3 つの順序のみが必要です。それらは何もないか、1、2 の場合があります。最大値は 3 です。
オリジナル 複数の辞書を使用して値を格納およびソートすることを考えましたが、複雑すぎます。

アップデート:

この json 配列は、C# コードによる json 文字列からのものです。

DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<CallDataDTO>));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(response4.Content.ReadAsStringAsync().Result));
calls = (List<CallDataDTO>)ser.ReadObject(ms); // dynamic
jsonStr4 = _dynamicConvert.DynamicToString(calls);// convert dynamic to string
jsonArray4 = JArray.Parse(jsonStr4); // convert string to a json array.

更新 2:

?jsonArray4
{[
   {
    "CKey": "P2_123_23_20130416105655",
    "TimeOfCall": "2013-04-17T06:00:00-04:00",
    "DestinationNumber": "1234567890",
    "CallType": "DEBIT",
    "CardNumber": ""
 },
 {
"CKey": "P5_123_105_20130412154035",
"TimeOfCall": "2013-04-17T07:00:00-04:00",
"DestinationNumber": "1234567890",
"CallType": "DEBIT",
"CardNumber": ""
},
{
  "CKey": "P5_123_114_20130412154000",
  "TimeOfCall": "2013-04-07T08:00:00-04:00",
  "DestinationNumber": "1234567890",
  "CallType": "DEBIT",
  "CardNumber": ""
}
]}
base {Newtonsoft.Json.Linq.JContainer}: {[
{
  "CKey": "P2_123_23_20130416105655",
  "TimeOfCall": "2013-04-17T06:00:00-04:00",
  "DestinationNumber": "1234567890",
  "CallType": "DEBIT",
  "CardNumber": ""
},
{
  "CKey": "P5_123_105_20130412154035",
  "TimeOfCall": "2013-04-17T07:00:00-04:00",
  "DestinationNumber": "1234567890",
  "CallType": "DEBIT",
  "CardNumber": ""
},
{
 "CKey": "P5_123_114_20130412154000",
 "TimeOfCall": "2013-04-07T08:00:00-04:00",
 "DestinationNumber": "1234567890",
 "CallType": "DEBIT",
 "CardNumber": ""
}
]}
 Type: Array
4

1 に答える 1

1

私は何かを試してみます

jsonArray4.Where(item => Convert.ToDateTime(item["TimeOfCall"]).Date == DateTime.Now.Date)
.OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
.Take(3);

更新: 当日ではなく過去 24 時間が必要な場合:

jsonArray4.Where(item => Convert.ToDateTime(item["TimeOfCall"]) >= DateTime.Now.AddHours(-24))
.OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
.Take(3);

Linq から Json へ

Update2: 以前に提案したことは機能するはずです。ここに私の完全なコードサンプルがあります:

string jsonText = @"[
{
    'CKey': 'P2_123_23_20130416105655',
    'TimeOfCall': '2013-04-17T06:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
},    
{
    'CKey': 'P5_123_105_20130412154035',
    'TimeOfCall': '2013-04-17T07:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
},
{
    'CKey': 'P5_123_114_20130412154000',
    'TimeOfCall': '2013-04-07T08:00:00-04:00',
    'DestinationNumber': '1234567890',
    'CallType': 'DEBIT',
    'CardNumber': ''
}    
]";

var result = JArray.Parse(jsonText).
    Where(item => Convert.ToDateTime(item["TimeOfCall"]).Date == new DateTime(2013, 4, 17))
    .OrderByDescending(item => Convert.ToDateTime(item["TimeOfCall"]))
    .Take(3);

実際に何かを返すように条件を少し変更したことに注意してください。過去 24 時間の結果のみが必要な場合は、条件を >= DateTime.Now.AddHours(-24) に変更します。

于 2013-04-18T13:48:38.493 に答える