Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-基于修改日期和创建日期对字典进行排序_C#_Linq_Dictionary - Fatal编程技术网

C#-基于修改日期和创建日期对字典进行排序

C#-基于修改日期和创建日期对字典进行排序,c#,linq,dictionary,C#,Linq,Dictionary,我在字典中有一些记录,我需要根据创建日期(CDate)和修改日期(MDate)对数据进行排序。创建记录时,我的CDate将具有当前日期时间,但MDate将为1/1/0001 12:00:00 AM FileSchedulerEntities = FileSchedulerEntities .OrderByDescending(pair => pair.Value.MDate) .ThenByDesc

我在字典中有一些记录,我需要根据创建日期(CDate)和修改日期(MDate)对数据进行排序。创建记录时,我的CDate将具有当前日期时间,但MDate将为1/1/0001 12:00:00 AM

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);
这是用于排序的示例数据和代码

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);
CDate-MDate
2013年4月30日下午4:43:41 2013年4月30日下午4:46:47
2013年4月30日下午4:43:28 2013年4月30日下午4:46:36
2013年4月30日下午4:43:54 2013年4月30日下午4:46:16
2013年4月30日下午5:03:13 0001年1月1日凌晨12:00:00

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);
代码:

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);
根据排序,我需要按如下降序排序的数据。
CDate-MDate
2013年4月30日下午5:03:13 0001年1月1日凌晨12:00:00
2013年4月30日下午4:43:41 2013年4月30日下午4:46:47
2013年4月30日下午4:43:28 2013年4月30日下午4:46:36
2013年4月30日下午4:43:54 2013年4月30日下午4:46:16

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);

但上述代码不起作用。有什么想法吗?

字典中的项目顺序未定义如下:

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);
返回项目的顺序未定义

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);
如果您需要允许通过键进行O(1)访问的结构,请使用
字典

如果您需要一个有序的结构,请使用类似于
List

的方法尝试一个

FileSchedulerEntities = FileSchedulerEntities
                       .OrderByDescending(pair => pair.Value.MDate)
                       .ThenByDescending(pair => pair.Value.CDate)
                       .ToDictionary(pair => pair.Key, pair => pair.Value);

您可以创建自己的ToSortedDictionary,但我正在手动排序数据。但是排序没有按预期工作。@MidhunlalG:因为排序后,您将数据存储回字典,实际上会丢失您刚才执行的所有排序。如果字典不可排序,那么OrderByDescending()和ThenByDescending()的优点是什么?我也尝试过这段代码,但没有存储回字典
FileSchedulerEntities.OrderByDescending(pair=>pair.Value.MDate),然后ByDescending(pair=>pair.Value.CDate)。但是运气不好。@MidhunlalG:
OrderBy
和类似命名的方法是
IEnumerable
上的扩展方法<代码>字典
实现了
IEnumerable
。这就是为什么这些扩展方法可以在字典上使用的原因。调用它们将生成一个按指定方式排序的
IEnumerable
。所以他们在这里是有道理的。您的错误是调用
ToDictionary()
。这将从已排序的枚举表中创建一个字典。但是这种转换不是无损的,因为(续)我认为你不能对字典进行排序。你为什么不玩弄一下
列表
@naveen-如果字典是不可排序的,那么OrderByDescending()和ThenByDescending()有什么好处?@MidhunlalG:请看我答案上的长篇评论。它回答了这个问题。这个答案忽略了一个关键点:它不会保留由
OrderBy
等创建的顺序。它会按照比较器认为正确的顺序进行排序。这是一个你正在寻找的更专业的词典,你需要自己实现它。我想这个问题是关于ToDictionary返回的词典未按您的要求订购。因为它是设计出来的,所以您现在确信您必须自己实现它。或者现在的问题是“如何实施?”如果是,我们需要了解您的需求以提供帮助。你需要按值排序还是按键排序?保罗,我不是问这个问题的人。我是提供公认答案的人。@DanielHilgarth,哎呀!我的错!