我正在使用Dapper的查询<>搜索一些记录:
public class Product
{
public int Id {get; set}
public string Name {get; set}
public int CategoryId {get; set}
]
public IEnumerable<Product> GetProducts(int categoryId)
{
var connection = DataContext.Database.Connection;
var sql = "SELECT * FROM products WHERE category_id = @categoryId";
var result = connection.Query<Product>(sql, new { categoryId });
return result;
}
查询本身返回请求的记录,但列表中的每个对象都有空字段。
那么如何将列映射到实体的属性?
我不想在sql语句中添加列别名。装饰实体的属性也不是一种选择,因为实体是由EF设计者生成的。
答案 0 :(得分:6)
您的Product类必须定义,以匹配从查询返回的结果。所以你能做的是 -
public IEnumerable<Product> GetProducts(int categoryId)
{
var connection = DataContext.Database.Connection;
var sql = "SELECT * FROM products WHERE category_id = @categoryId";
var result = connection.Query<Product>(sql, new { categoryId }).Select(p => new Product {
Id = (int)p.ProductId,
Name = (string)p.ProductName,
CategoryId = (int)p.ProductCategoryId
});
return result;
}