2011-01-22 60 views
1

VAR的事件= context.Events .........如何编写LINQ获得最近传入事件记录

活动有一个属性“交货期”(日期时间)

我想选择最近的5条记录,如何编写这样的查询?由于

+0

DueDate是否反映记录的“最近”? – 2011-01-22 05:35:19

+0

不〜这只是一个到期日期。 – user469652 2011-01-22 05:39:29

回答

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到实体不直接支持DateTime操作,但如果你使用的SQL服务器像DateDiff应该工作(未经测试,你将不得不尝试自己):

​​

如果这不起作用,你总是可以首先获取你的数据,然后用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

一种方式来写它:

var events = context.Events.OrderByDescending(e=>e.DueDate).Take(5);

+0

这会不会选择前5名有'最大'Duedate的recoreds? – user469652 2011-01-22 05:33:19