我们如何在Entity Framework中进行对象过滤?

thr*_*thr 5 .net c# entity-framework

定义对象上下文时,首先在实体框架中使用代码,例如:

public class DomainContext : DbContext
{
    public DomainContext() { }
    public virtual DbSet<News> News { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我们都知道你可以查询"新闻"做类似的事情(例如,获取今天发布的所有新闻):

var ctx = new DomainContext();
ctx.News.Where(x => x.PublishedDate == DateTime.Now.Date)
Run Code Online (Sandbox Code Playgroud)

但是,这就是问题:是否有办法对所有通过的查询应用预定义的过滤/条件ctx.News?假设我希望所有查询ctx.News都隐式应用"Published Today"过滤?

Jac*_*cob 0

您可以将新属性添加到您的上下文中:

public IEnumerable<News> TodaysNews
{
    get
    {
        return this.News.Where(x => x.PublishedDate == DateTime.Now.Date);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以将任何进一步的过滤/排序/等应用于该属性。

更新:

如果您无法仅使用预先过滤的查询,另一种选择是在数据库中创建视图并将实体映射到该视图。该视图可以基于当前日期。