2011-01-22 43 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