2016-03-31 21 views
-1

我有一个bool方法的类,例如:我可以在实体框架代码优先中使用我的领域模型中的谓词吗?

public bool IsInFuture() 
{ return this.Date > DateTime.Now; } 

而且我把它保存在使用EF代码第一次的数据库。如果我将尝试使用Linq中的操作说明上游,我会得到一个例外,因为它不能被转换成SQL:

await context.Where(order => order.IsInFuture()).ToListAsync(); 

这个谓词的逻辑可以是相当复杂的,我不希望在我的代码中复制它。有什么办法可以将代码嵌入到Linq操作中?我很确定,这个问题有一个解决方案。

在此先感谢!

+0

为什么这需要是布尔方法?它看起来只是一个返回属性,然后你可以在你使用这个linq等待context.Where(order => order.IsInFuture).ToListAsync(); –

+0

然后我需要将这些属性存储在数据库中。我需要他们来计算。 – Waldemar

+3

您不能使用自定义功能。您可以使用表达式,但必须可以转换为SQL。 –

回答

0

您不能直接使用谓词。 EF如何知道如何将其转换为SQL WHERE语句?

您有几种选择:

  • 修改你的查询中使用标准操作,例如小超。但是,这将复制谓词中的逻辑。
  • 使用原始SQL查询。这也将复制逻辑,但在SQL中。
  • 加载实体的整个列表,然后过滤内存中的内容(即在ToList()之后的Where())。像这样,你可以重用谓词。 请注意,这对于非常小的数据集来说只是一个好主意。
+0

我有一个想法强制谓词函数被内联。理论上这应该有所帮助。我会尽量在几天内完成。也许有人有经验,可以分享吗? – Waldemar

相关问题