我在工作中使用了 LINQ 和 Dapper 的组合。出于性能原因,我在某些地方用 Dapper 替换了我的 LINQ 代码。我有很多通过从 SQL Server 拖放到 Visual Studio 数据库图中创建的 LINQ 数据对象。
在下面的例子中,我已经在内存中有一个 LINQ 对象,我想将它作为查询的参数传递给 Dapper。例如:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
cagedAnimal).SingleOrDefault();
crawledAnimal 包含一个公共属性 AnimalId 和 AnimalType 以及 getter 和 setter。
但是在执行此代码时,我收到以下错误:
dapper 不支持类型:SMDApp.Models.Animal
以下代码确实有效:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
new
{
AnimalId = cagedAnimal.AnimalId,
AnimalType = cagedAnimal.AnimalType
}
).SingleOrDefault();
对我来说,使用现有对象会更方便,特别是在我使用对象的多个属性作为查询参数的情况下。谁能告诉我为什么这适用于匿名对象而不适用于自动生成的 LINQ 对象?
针对 Ben Robinson 的回复进行了编辑。
针对 Marc Gravell 的回复进行了第二次编辑。