在List <dictionary <string,string>&gt;中选择最小键值对字典值是字符串

时间:2016-08-17 20:03:04

标签: c# datetime dictionary

所以我有一个

IEnumerable<Dictionary<string,string>>

从使用

获得
var differences = activeCalls.Where(l1 => !tempActiveCalls.Any(l2 => l1 == l2));

将id作为键,日期格式为

DateTime.ToString("s") 

我想要的是获得具有最早日期的键值对。 现在我正在使用

List<Dictionary<string, DateTime>> minDate = new List<Dictionary<string, DateTime>>();
//convert strings to dates
foreach(var dictionary in differences)
{
    foreach(var kvp in dictionary)
    {
        minDate.Add(new Dictionary<string, DateTime>()
        {
            {kvp.Key, DateTime.ParseExact(kvp.Value,"yyyy'-'MM'-'dd'T'HH':'mm':'ss",null) }
        });
    }
}

将字符串转换为日期时间格式,但我仍然坚持如何根据日期选择最小键/值对。我也不认为这是最简单的方法。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

这是一种方法,按键排序并获取第一个元素。这是因为密钥在字典实例中的结构方式,DateTime.ToString("s")生成一个可排序的日期时间字符串(其ISO表示法),无需将其转换为DateTime类型。 SelectMany会将字典实例展平为单个集合。使用OrderBy将按升序排序(最早到最晚)。

var result = differences.SelectMany(y => y).OrderBy(x => x.Key).First();

您需要在代码文件的顶部加入using System.Linq;