Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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_Datetime - Fatal编程技术网

C#按时间倒序排列列表

C#按时间倒序排列列表,c#,linq,datetime,C#,Linq,Datetime,我正在sql server数据库中将时间字段保存为nvarchar(“HH:mm”)格式 根据大家的建议。现在,我将时间以日期时间格式保存在sql server数据库中。虽然我不需要日期部分,但是我会使用这个属性,这样我就可以达到我想要达到的效果。 现在我要做的是,根据当前执行时间,以逆时间顺序获取行列表。例如,如果我的表格如下所示: tblFavoriteTime ID Time Post 1 05:00 AM Something.. 2 09:00

我正在sql server数据库中将时间字段保存为nvarchar(“HH:mm”)格式

根据大家的建议。现在,我将时间以日期时间格式保存在sql server数据库中。虽然我不需要日期部分,但是我会使用这个属性,这样我就可以达到我想要达到的效果。 现在我要做的是,根据当前执行时间,以逆时间顺序获取行列表。例如,如果我的表格如下所示:

tblFavoriteTime
ID     Time       Post
1     05:00 AM    Something..
2     09:00 AM    Another..
3     12:00 PM    Hello..
4     01:00 PM    Its 8 am..
var mylist = _repository.GetAll().ToList()
            .OrderBy(x => x.TimeStamp.TimeOfDay() .......); 
            //as I explained, Im only getting the time of day though its a datetime object, date part wont matter..
当我在下午12:00访问该站点时,我需要按时间倒序排列的时间列表。因此,12:00PM将位于列表的顶部,
12:00PM->11:00AM->10:00AM->。。。。凌晨1:00->凌晨12:00->下午1:00->下午2:00->。。。。。晚上11:00
使用上述数据,我应该得到:

ID     Time         Post
3     12:00 PM      Hello...
2     09:00 AM      Another..
1     05:00 AM      Something..
4     01:00 PM      Its 1 pm..
有没有一种方法可以使用
LinQ.OrderBy()
或类似的东西来实现这一点:

tblFavoriteTime
ID     Time       Post
1     05:00 AM    Something..
2     09:00 AM    Another..
3     12:00 PM    Hello..
4     01:00 PM    Its 8 am..
var mylist = _repository.GetAll().ToList()
            .OrderBy(x => x.TimeStamp.TimeOfDay() .......); 
            //as I explained, Im only getting the time of day though its a datetime object, date part wont matter..

请帮忙

这是你想要的吗

var times = new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", };

var output = times.OrderByDescending(x => (x.CompareTo("10:00") <= 0 ? "Z" : "") + x);
我得到了与上面相同的结果。

如果你被一个
nvarchar
卡住了,那么你可以先解析到一个时间跨度,例如

var times = new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", };
var output = times.OrderByDescending(x => TimeSpan.Parse(x));
TimeSpan now=DateTime.now.TimeOfDay//实地考察时间
var query=rows.ToList()
.OrderBy(x=>x.TimeStamp.TimeOfDay x.TimeStamp.TimeOfDay);

排序后的最后13:00是怎样的?为什么要将一个存储为nvarchar?@EhsanSajjad让我们假设你有一个时钟,当你在12:00AM查看它时,想象时钟是逆时针运行的,
12AM->11AM->…->>凌晨1点->中午12点-下午1点
这应该是
优惠时间。OrderByDescending(x=>x.Time)
@super user一个坏习惯不能证明另一个坏习惯是正确的。使用适当的类型来存储时间值。例如,勾号保证了问题,因为它们没有时区,不知道夏令时,范围非常有限(特别是如果是int),没有正确排序或排序的可能性(由于缺少tz偏移)。是的,我正在尝试这样的输出。但是我应该引用什么来使用CompareTo(),调用它时我会看到红色的曲线,我的vs2013无法自动解析它如果我有一个DateTime对象数组,我该如何使用它?我试图按照评论部分的建议使用适当的DateTime属性。非常感谢。工作完美。
TimeSpan now = DateTime.Now.TimeOfDay; //site visit time

var query = rows.ToList()
  .OrderBy(x => x.TimeStamp.TimeOfDay <= now ? 1 : 2)
  .ThenByDescending(x => x.TimeStamp.TimeOfDay);