c# - 如何确定 EF 核心中的自定义服务器评估?
问题描述
我有这个实体
public class Foo
{
public int Id{get; private set;}
public DateTime CreatedOn {get; private set;}
public bool IsActive {get; private set;}
public bool CanBeDisplayed => IsActive && CreatedOn > DateTime.Now.AddYear(-1);
}
我想这dbcontext.Foos.Where(f=>f.CanBeDisplayed).ToArray();
可以在 sql server 端进行评估。可能在 DBContext 类中有一个属性或一些绑定可以给我一个工作。我的目标是拥有一个丰富的模型,兼容 ef 核心,我错过了什么吗?
解决方案
我看到两种可能的解决方法:
- 介绍计算列并为其提供sql。
- 制作表达式树
public class Foo
{
public int Id { get; private set; }
public DateTime CreatedOn { get; private set; }
public bool IsActive { get; private set; }
// mark ignored for EF?
public bool CanBeDisplayed => _compiled(this);
private static Func<Foo, bool> _compiled = CanBeDisplayedExp.Compile();
public static Expression<Func<Foo, bool>> CanBeDisplayedExp = f => f.IsActive && f.CreatedOn > DateTime.Now.AddYears(-1);
}
使用仅限于dbcontext.Foos.Where(Foo.CanBeDisplayedExp).ToArray()
也不确定 EF 是否可以翻译DateTime.Now.AddYears
。
附言
推荐阅读
- java - 在 finally 块中包含业务逻辑是否合法?
- highcharts - 有两个圆圈的饼图需要更改内圈的背景颜色
- android - Android如何在布局文件中使用材料设计图标
- c++ - nCurses 应用程序来自后台时的内容无效
- postgresql - PostgreSQL 中层次结构的多个角色的行级安全性
- spring-boot - Spring-Boot 无法为 @Configuration 类创建的 bean 列表执行 @Schedule 任务
- r - 如何使用R中的等式矩阵删除重复项?
- git - git push 上传大量数据(比我的仓库大 5 倍),因此需要很长时间才能完成
- javascript - 导入 json MongoDB
- html - 输入组插件内的字形未垂直对齐