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();
这需要距离今天(过去或 future )最少天数的事件。
如果你想要最近但只是在未来发生的事件,你可以这样做:
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 to objects 进行过滤,这有一个额外的好处,即您不会将自己束缚在 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();
关于c# - 如何写linq获取最近传入的事件记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766346/