【发布时间】:2014-07-25 18:32:02
【问题描述】:
我有一个相当简单的扩展方法。 当尝试在实体框架中使用它时,我得到了这个
LINQ to Entities does not recognize the method 'Boolean Between[DateTime](System.DateTime, System.DateTime, System.DateTime, Boolean)'
许多其他人也遇到了同样的问题,我理解这个错误。总有办法让它发挥作用。
我一直在研究如何重新实现此方法并使其对 EF 友好。
对于这个特定的方法,它只是检查一个 IComparable 是否在另外两个之间。所以实际上它只会扩展到
.Where(x=> x.Date >= startDate && x.Date <= endDate)
而我真正想做的就是让眼睛看起来更轻松,并表达出来
.Where(x=> x.Date.Between(startDate, endDate))
由于我对 Func 非常陌生,因此我确信有一种方法可以处理扩展方法(即使是专门为 EF 编写的),以便它们对 EF linq 友好
我在 SO 和其他网站上进行了一些挖掘,发现了一些有趣的答案,但无法与他们一起越过终点线。
提前致谢!
【问题讨论】:
-
如果它确实有效,那么继续使用第一个版本。 EF 在后台将您的查询转换为 SQL,因此自定义(或不受支持的)方法不能在 EF 查询中使用,因为 EF 提供程序不知道如何将它们正确转换为 sql..
-
@ethicallogics 解决方案不是在应用程序端而不是在数据库端做工作。这个问题的解决方案很糟糕。
-
@Selman22,第一种方法确实有效,我的一部分感觉必须有一种方法可以返回翻译。在我的扩展方法中构建一个 lambda express 并返回它或类似的东西
-
@ethicallogics,除了我试图不查询所有内容之外,它有效。我将使用的大多数表都有大量数据。谢谢你的信息
标签: c# linq entity-framework