在小巧的连接查询中使用动态对象列表
Using dynamic list of objects in dapper join queries
是否可以创建以下返回类型为 IEnumerable<dynamic>
的书面小巧查询,因为我没有产品和供应商 POCO。
IEnumerable<Product> products = sqlConnection
.Query<Product, Supplier, Product>(
@"select Products.*, Suppliers.*
from Products join Suppliers
on Products.SupplierId = Suppliers.Id
and suppliers.Id = 2",
(a, s) =>
{
a.Supplier = s;
return a;
});
如果我的 sql 查询如下所示,我的 dapper 查询将如何返回 IEnumerable<dynamic>
select Products.ProductId,Products.ProductName,Products.ProductCategory, ProductPrice.Amount,ProductPrice.Currency
from Products join ProductPrice
on Products.ProductId = ProductPrice.ProductId
真诚感谢所有帮助。
谢谢
是的,您可以将查询结果映射到动态对象列表(文档 here)。
const string sql = @"select Products.ProductId, Products.ProductName, Products.ProductCategory, ProductPrice.Amount, ProductPrice.Currency
from Products join ProductPrice
on Products.ProductId = ProductPrice.ProductId";
IEnumerable<dynamic> products = sqlConnection.Query(sql);
在您的第一个示例中,您正在执行 multi mapping 将每个 table 行映射到 2 个对象而不是一个(Product
和 Supplier
),然后通过产品退回前参考。我不认为你可以用动态对象做到这一点,因为 Dapper 无法知道如何在它们之间划分列。您可以通过测试来确认这一点,将通用参数 <Product, Supplier, Product>
替换为 <dynamic, dynamic, dynamic>
.
跳过多重映射仅意味着返回的 dynamic
对象将同时包含 Product
和 Supplier
属性,这对您来说可能不是问题。
是否可以创建以下返回类型为 IEnumerable<dynamic>
的书面小巧查询,因为我没有产品和供应商 POCO。
IEnumerable<Product> products = sqlConnection
.Query<Product, Supplier, Product>(
@"select Products.*, Suppliers.*
from Products join Suppliers
on Products.SupplierId = Suppliers.Id
and suppliers.Id = 2",
(a, s) =>
{
a.Supplier = s;
return a;
});
如果我的 sql 查询如下所示,我的 dapper 查询将如何返回 IEnumerable<dynamic>
select Products.ProductId,Products.ProductName,Products.ProductCategory, ProductPrice.Amount,ProductPrice.Currency
from Products join ProductPrice
on Products.ProductId = ProductPrice.ProductId
真诚感谢所有帮助。
谢谢
是的,您可以将查询结果映射到动态对象列表(文档 here)。
const string sql = @"select Products.ProductId, Products.ProductName, Products.ProductCategory, ProductPrice.Amount, ProductPrice.Currency
from Products join ProductPrice
on Products.ProductId = ProductPrice.ProductId";
IEnumerable<dynamic> products = sqlConnection.Query(sql);
在您的第一个示例中,您正在执行 multi mapping 将每个 table 行映射到 2 个对象而不是一个(Product
和 Supplier
),然后通过产品退回前参考。我不认为你可以用动态对象做到这一点,因为 Dapper 无法知道如何在它们之间划分列。您可以通过测试来确认这一点,将通用参数 <Product, Supplier, Product>
替换为 <dynamic, dynamic, dynamic>
.
跳过多重映射仅意味着返回的 dynamic
对象将同时包含 Product
和 Supplier
属性,这对您来说可能不是问题。