C# 如何确定EF core中的自定义服务器评估?
我有这个实体C# 如何确定EF core中的自定义服务器评估?,c#,entity-framework,domain-driven-design,ef-core-3.1,C#,Entity Framework,Domain Driven Design,Ef Core 3.1,我有这个实体 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
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
制作表达式树
公共类Foo
{
public int Id{get;private set;}
public DateTime CreatedOn{get;private set;}
public bool IsActive{get;private set;}
//为EF忽略标记?
公共布尔值可显示=>\u已编译(此);
private static funcu compiled=CanBeDisplayedExp.Compile();
公共静态表达式CanBeDisplayedExp=f=>f.IsActive&&f.CreatedOn>DateTime.Now.AddYears(-1);
}
用法仅限于dbcontext.Foos.Where(Foo.CanBeDisplayedExp.ToArray()
也不确定EF是否可以翻译DateTime.Now.AddYears
附言
仅供参考Linq2Db
拥有和支持 请参见生成的值:
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);
}