c# - 如何写linq获取最近传入的事件记录

标签 c# linq entity-framework

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/

相关文章:

Linq to XML Noob 问题 - 不同并按属性排序

c# - 确定是否通过了具体值或表达式?

c# - 完整的 Entity Framework 存储库接口(interface)

entity-framework - ObjectContext 永远不会从接口(interface)派生??当ObjectContext有多种类型时,如何应用DI/IoC?

c# - 在 ASP.NET MVC Web 应用程序中包含预编译 View

c# - 如何在 C# 控制台应用程序中从 .cshtml (razor) 模板创建 pdf

c# - 线程状态异常 : Thread has not been started when trying to join a thread

c# - WCF 身份验证不起作用

c# - 只获取第一个项目与 SyndicateItem/foreach 的替代品

.net - 定义 Entity Framework 1 :1 association