排序字典数组



我有以下数组,我想按时间键排序:

Dictionary<string, object>[] callHistory = CharactersPhone.CharactersPhoneCallHistorys_.ToList().Where(x => x.charPhoneNumber == Characters.GetCharacterPhonenumber(charId)).Select(x => 
new Dictionary<string, object>
{
{"charPhoneNumber" , x.charPhoneNumber.ToString()},
{"targetPhoneNumber" , x.targetNumber.ToString()},
{"state" , x.state},
{"outgoingstate", x.outgoingState},
{"time" , x.timestamp.ToString("dd.MM.yyyy HH:mm")}
}).ToArray();

我试着这样做:

var sorted = callHistory.OrderBy(x => Array.IndexOf(callHistory, x.time))

但是关键字"x.time"是找不到的,我想我脑子有点迟钝,或者有什么根本的问题,但我找不到答案。也许这里有人能帮忙。

对于字典,您需要使用索引器:

var sorted = callHistory.OrderBy(x => x["time"])

我还要注意,这是根据字符串值对它进行排序的,因为这是用来创建字典的。我会保持它作为一个时间,只有当你显示的数据转换为字符串,或存储日期/时间在一个可排序的格式(例如yyyy-MM-dd hh:mm)

您试图访问keyed值,好像它是propertyfield.
而不是使用.操作符访问它,使用index operator,如下所示:

var a = new Dictionary<string, object>
{
{"charPhoneNumber" , 'a'},
{"targetPhoneNumber" , 'b'},
{"state" , 'c'},
{"outgoingstate", 'd'},
{"time" , 'e'}
};
var b = a["time"];
Console.WriteLine(b); // Outputs "e"

在您的情况下,您将使用x["time"]代替x.time

最新更新