В своей работе я использую комбинацию LINQ и Dapper. Я заменяю свой код LINQ на Dapper из соображений производительности. У меня есть много объектов данных LINQ, созданных путем перетаскивания на диаграмму базы данных Visual Studio из SQL Server.
В следующем примере у меня уже есть объект LINQ в памяти, и я хотел бы передать его Dapper в качестве параметров запроса. Например:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
cagedAnimal).SingleOrDefault();
CagedAnimal содержит общедоступные свойства AnimalId и AnimalType с геттерами и сеттерами.
Однако при выполнении этого кода я получаю следующую ошибку:
Тип: SMDApp.Models.Animal не поддерживается dapper.
Следующий код работает:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
new
{
AnimalId = cagedAnimal.AnimalId,
AnimalType = cagedAnimal.AnimalType
}
).SingleOrDefault();
Мне было бы удобнее использовать существующий объект, особенно когда я использую более одного свойства объекта в качестве параметра для запроса. Может ли кто-нибудь сказать мне, почему это работает для анонимного объекта, но не для автоматически сгенерированного объекта LINQ?
Отредактировано в ответ на ответ Бена Робинсона.
Отредактировано во второй раз в ответ на ответ Марка Гравелла.
"...", cagedAnimal)
? возможно, вы делаете"...", new { cagedAnimal })
вместо этого? в основном - это уже должно работать, хотя это немного расточительно, поскольку дополнительные параметры могут быть добавлены без необходимости/ - person Marc Gravell   schedule 29.06.2011