var events = context.Events .........
事件的属性'DueDate'(日期时间)
我想选择最近的5条记录,如何编写这样的查询?感谢
答案 0 :(得分:3)
如果您对最接近白天的活动感兴趣,可以这样做:
DateTime today = DateTime.Now;
var events = context.Events
.OrderBy(e => Math.Abs((today - e.DueDate).Days))
.Take(5)
.ToList();
这将采用距离今天(过去或将来)最少天数的事件。
如果您想要最近但仅限于将来的活动,您可以这样做:
DateTime today = DateTime.Now;
var events = context.Events
.Where(e => e.DueDate >= today)
.OrderBy(e => (e.DueDate - today).Days)
.Take(5)
.ToList();
修改强>
如果您使用LINQ to Entities DateTime
操作不是直接支持的,但是如果您使用SQL服务器,DateDiff之类的东西应该可以工作(未经测试,您将不得不亲自尝试):
DateTime today = DateTime.Now;
var events = context.Events
.Where(e => e.DueDate >= today)
.OrderBy(e => System.Data.Objects.SqlClient.SqlFunctions.DateDiff("d", e.DueDate, today))
.Take(5)
.ToList();
如果这不起作用,您可以始终先获取数据,然后使用LINQ过滤到对象,这样可以增加您不会将自己绑定到SQL Server的好处 - 但显然效率不高:
DateTime today = DateTime.Now;
var futureEvents = context.Events
.Where(e => e.DueDate >= today);
.ToList();
var filteredEvent = futureEvents
.OrderBy(e => (e.DueDate - today).Days)
.Take(5)
.ToList();
答案 1 :(得分:1)
写一种方法:
var events = context.Events.OrderByDescending(e=>e.DueDate).Take(5);