Сначала работает, потому что является методом расширения и выполняет запрос как функцию, а затем фильтрует ваш список , см. Здесь .
Таким образом, в общем случае он будет автоматически приводить куда к
Where(Func<WorkOrder, bool>
Второе - нет, потому что оно подталкивает ваше утверждение where к БД. Когда лямбда-выражение вычисляется, оно раскрывается следующим образом:
Where( Expresion<Func<WorkOrder, bool>>)
Вот хорошая статья , которая объясняет Выражения против Func
Вот еще один пост, который помогает объяснить разницу
[Редактировать (BlueRaja)]
Это новое редактирование представляется правильным. Чтобы уточнить: кажется, Func<WorkOrder, bool>
неявно преобразуется в Expression<Func<WorkOrder, bool>>
, но не наоборот.
Существуют перегрузки Where
для обоих типов. .Where(MyCustomMethod)
вызывает Func<WorkOrder, bool>
, тогда как .Where(o => MyCustomMethod(o))
вызывает Expression<Func<WorkOrder, bool>>
.