На самом деле можно перехватить запрос и переписать его. См. IQueryable.Provider
и IQueryable.Expression
свойства. Но это включает в себя написание пользовательского ExpressionVisitor
для перевода вызова и очень быстро усложняется.
Если приведенный выше код является единственным несоответствием между Linq-To-SQL и EF, с которым вы столкнулись, вы можете переписать запрос следующим образом:
db.SomeTable.Where(x => x.Year == DateTime.Today.Year && x.Month == DateTime.Today.Month && x.Day == DateTime.Today.Day)
Я почти уверен, что EF должен поддерживать это сравнение, как и Linq-To-Sql.
Если вы хотите попробовать первое решение, я рекомендую вам создать IQueryable<T>
-обёртку для ObjectSet<T>
, возвращаемого EF, и установить точку останова при выполнении простых запросов и посмотреть, как дерево выражений фактически хранится в запрос, это может дать представление о том, что искать и чем его заменить.