簡體   English   中英

如何編寫linq以獲取最新的傳入事件記錄

[英]How to write linq to get most recent incoming event records

var events = context.Events .........

活動有'DueDate'屬性(日期時間)

我想選擇最近的5條記錄,如何編寫這樣的查詢? 謝謝

如果您對最接近當天的活動感興趣,您可以這樣做:

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 Server, 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();

寫它的一種方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM