var sql = @"SELECT
a.id AS `Id`,
a.thing AS `Name`,
b.id AS `CategoryId`,
b.something AS `CategoryName`
FROM ..";
var products = connection.Query<Product, Category, Product>(sql,
(product, category) =>
{
product.Category = category;
return product;
},
splitOn: "CategoryId");
foreach(var p in products)
{
System.Diagnostics.Debug.WriteLine("{0} (#{1}) in {2} (#{3})", p.Name, p.Id, p.Category.Name, p.Category.Id);
}
'First (#1) in (#0)'
'Second (#2) in (#0)'
的CategoryId和類別名稱具有值,因爲下面的
var products = connection.Query(sql).Select<dynamic, Product>(x => new Product
{
Id = x.Id,
Name = x.Name,
Category = new Category { Id = x.CategoryId, Name = x.CategoryName }
});
結果:
'First (#1) in My Category (#10)'
'Second (#2) in My Category (#10)'
我連接到MySQL數據庫如果與它有任何關係。
您正在使用spliton,您是否介意在Google代碼中向跟蹤器提交破損的測試? – 2011-05-19 12:40:27
@Sam我猜如果我把''CategoryName''改成'Name''它應該可以工作嗎?我的印象是,Dapper會使用一些automapper約定來映射''CategoryName''(也嘗試過''Category.Name'')到'x.Category.Name' – loraderon 2011-05-19 13:07:49
是的,你是對的@loraderon,它不會追加分類到所有道具......實際上它更簡單,只是爲了處理結果集中的重複列名稱。那麼你可以做一些像'select * from posts p加入作者a on p.AuthorId = a.Id'這是很簡潔的 – 2011-05-20 04:55:13