Потому что Find
принимает Func<T,bool>
вместо Expression<Func<T,bool>>
. Предположительно, этот запрос отправляется в механизм БД, поскольку он работает на IQueryable<T>
. Но если выражение передается как делегат, а не как истинное выражение, слой LINQ-to-what-DB не сможет проверить выражение и превратить его в SQL. Это приводит к тому, что весь набор данных отправляется с сервера базы данных в код C #, где выражение «где» затем применяется в CLR, а не в DB.
Изменить подпись Find
с
public IQueryable<T> Find(Func<T, bool> expression)
до
public IQueryable<T> Find(Expression<Func<T, bool>> expression)
Тогда посмотрите, как это работает.