【发布时间】:2016-03-31 10:54:58
【问题描述】:
我有一个带有bool 方法的类,例如:
public bool IsInFuture()
{ return this.Date > DateTime.Now; }
我使用 EF Code First 将其存储在数据库中。如果我尝试在 Linq 操作中使用该谓词,我会得到一个异常,因为它不能被翻译成 SQL:
await context.Where(order => order.IsInFuture()).ToListAsync();
该谓词的逻辑可能相当复杂,我不想在我的代码中重复它。有什么方法可以将其代码“内联”到 Linq 操作中?我很确定,这个问题有解决办法。
提前致谢!
【问题讨论】:
-
为什么这需要一个布尔方法?在我看来它只是一个返回属性,然后您可以在 linq await context.Where(order => order.IsInFuture).ToListAsync(); 中使用它
-
然后我需要将此属性存储在数据库中。我需要计算它们。
-
您不能使用自定义函数。您可以使用表达式,但它们必须可转换为 SQL。
-
可以在实体类上用[NotMapped]注解
-
@IvanStoev,当然,我的谓词方法被承诺被翻译成 SQL。使用表达式有什么好的解决方案吗?
标签: c# entity-framework linq domain-driven-design