我有以下数组,我想按时间键排序:
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
值,好像它是property
或field
.
而不是使用.
操作符访问它,使用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
。