Когда дело доходит до SQL trnalsation, в то время как выражения дерево может быть переведено, составлен методом не может. Это связано с тем, что как только метод скомпилирован, это вопрос чтения IL для выполнения перевода, который не отображается через .NET API, тогда как деревья выражений явно предназначены для навигации с использованием метакода для перевода.
Поскольку вы передаете Func<...>
вместо Expression<Func<...>>
, вы передаете этот скомпилированный метод, и, следовательно, код не может получить дерево выражений, и, следовательно, приведенный выше код не будет работать или будет выполняться на вашем локальном машина.
Если вы должны были заменить метод подписи с
public IList<Dog> GetDogsBy(Expression<Func<Dog, bool>> predicate)
Тогда это могло бы быть в состоянии выполнить преобразование, в зависимости от семантики Dapper.
Этот, безусловно, будет выполнен вашим приложением, а не переведен на SQL. – MarcinJuraszek
Подтвердить; этот предикат является LINQ-to-Objects и не обрабатывается dapper. Dapper не претендует на полноту ORM. Там * * некоторые полезные общие предикаты и т. Д. Инструменты в некоторых дополнительных связанных инструментах dapper, однако –
Как насчет того, как вы рассматриваете использование Dapper-Extensions (https://github.com/tmsmith/Dapper-Extensions)? –