我在我的工作中使用了LINQ和Dapper的組合。出於性能原因,我正在用Dapper替換我的LINQ代碼。我有很多通過從SQL Server中拖放到Visual Studio數據庫圖表創建的LINQ數據對象。使用LINQ自動生成類型的精簡參數化查詢
在下面的例子中,我已經在內存中有一個LINQ對象,我想將它作爲查詢的參數傳遞給Dapper。例如:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
cagedAnimal).SingleOrDefault();
cagedAnimal包含一個公共屬性AnimalId和AnimalType與getter和setter。
但是在執行此代碼我收到以下錯誤:
The type : SMDApp.Models.Animal is not supported by dapper
下面的代碼不工作:
Animal animal = con.Query<Animal>(" select * " +
" from animal " +
" where animalid = @AnimalId " +
" and animaltype = @AnimalType ",
new
{
AnimalId = cagedAnimal.AnimalId,
AnimalType = cagedAnimal.AnimalType
}
).SingleOrDefault();
它會更方便我特別是在使用現有對象我使用對象的多個屬性作爲查詢的參數。任何人都可以告訴我爲什麼這對匿名對象有效,但不是自動生成的LINQ對象?
編輯迴應本羅賓遜的答覆。
編輯第二次迴應Marc Gravell的答覆。
你是否確定*你正在做'「...」,cagedAnimal)'?你可能在做''...,新的{cagedAnimal})'而不是?基本上 - 這應該已經可以工作了,儘管這會有點浪費,因爲額外的參數可能會被不必要地添加/ –
只是爲了讓您知道我只是推送了一個修復程序,它可以:a忽略查詢中未使用的任何屬性,和b:當它*做鬥爭的時候給出一個更好的錯誤信息。我沒有部署到nuget,但使用新代碼,上面的示例應該可以正常工作 –
期待! –