2016-04-13 265 views
1

我在我的sql服务器数据库中以nvarchar(“HH:mm”)格式保存时间字段。 C#列表按时间倒序按时间顺序排序

根据每个人的建议。我现在将时间以DateTime格式保存在我的sql服务器数据库中。虽然我不需要日期部分,但我会使用这个属性,以便达到我试图做的效果。 现在我想要做的是根据当前的执行时间获取反向时间顺序的行列表。例如,如果我的表看起来像这样:

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.. 

当我访问该网站在下午12:00,我需要的时间按时间倒序排列的列表。所以,12:00 PM会在列表的顶部,12:00PM -> 11:00AM -> 10:00AM -> .... 1:00AM -> 12:00AM -> 01:00PM -> 02:00PM -> ..... 11:00PM使用上面的数据,我应该得到:

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()或者是这样的:

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.. 

请帮忙!

+0

如何13:00最后排序后? –

+6

为什么要将[time](https://msdn.microsoft.com/zh-CN/library/bb677243.aspx)作为nvarchar存储? –

+0

@EhsanSajjad让我们说你有一个时钟,当你在上午12:00看着它时,想象时钟会逆时针转动,'12AM - > 11AM - > ... - > 1AM - > 12PM - 1 PM' –

回答

3

这是做你想做的吗?

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); 

我得到如下:

 
10:00 
08:00 
22:40 
13:00 
12:00 
10:30 

尝试此DateTime领域。

var times = 
    new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", } 
     .Select(x => DateTime.Parse(x)); 

var output = times.OrderByDescending(x => (x.TimeOfDay.TotalHours <= 10 ? 24.0 : 0.0) + x.TimeOfDay.TotalHours); 

我得到了和上面相同的结果。

+0

是的即时尝试做这种输出。但是我应该引用什么来使用CompareTo(),在调用它时会得到红色的波浪线,而我的vs2013不能自动解决它 –

+0

如果我有一个DateTime对象数组,我该如何使用它?我试图按照评论部分中的人们的建议使用适当的DateTime属性。 –

+0

请参阅我的编辑.. –

0

如果您是“卡住”与nvarchar,那么您可以先解析为TimeSpan,例如,

var times = new [] { "10:30", "22:40", "12:00", "10:00", "13:00", "08:00", }; 
var output = times.OrderByDescending(x => TimeSpan.Parse(x)); 
+0

请看我的编辑.. –

0
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); 
+0

请看我的编辑.. –