我将sql server数据库中的Time字段保存为(" HH:mm")格式的nvarchar。
根据每个人的建议。我现在以DateTime格式将时间保存在我的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..
当我在中午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 :(得分: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);
我得到与上面相同的结果。
答案 1 :(得分: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));
答案 2 :(得分: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);