【发布时间】:2020-10-20 10:18:48
【问题描述】:
我有以下课程,并希望能够使用这样的 Linq 查询dbContext.Example.Where(e=> e.IsBetween); 来查询它
public class Example {
public DateTime Start {get; set;}
public DateTime End {get; set;}
public bool IsBetween => DateTime.Now >= Start && DateTime.Now <= End ;
}
但是,这会在运行时导致“无法翻译 LINQ 表达式 [...]。要么重写 [...] 要么切换到客户端评估”错误。
我有什么方法可以将只读属性IsBetween 链接到数据库中的计算列?
【问题讨论】:
-
我已经在 asp.net core 3.1
List<Example> ls = new List<Example>(); ls.Where(x => x.IsBetween);中尝试过它没有给我任何编译错误 -
它不会抛出编译但运行时错误,应该指定,对不起!
-
@viveknuna 您尝试的只是 LINQ-to-Objects,而不是实体框架。除了反编译代码之外,没有办法将任意函数转换为 SQL。当您使用 LINQ 编写 EF 查询时,您使用 表达式,而不是 lambda 或函数
-
@Torui 您尝试的操作是不可能的——无法将函数转换为 SQL。 LINQ to EF 或 NHibernate 与 expressions 一起工作,如果可能的话,这些表达式会被翻译成 SQL。该错误清楚地表明您无法将该函数转换为 SQL
标签: c# linq linq-to-sql entity-framework-core ef-core-3.1