2016-02-07 7 views
0

Возможно ли создать ниже написанный запрос dapper с возвращаемым типом как IEnumerable<dynamic>, так как у меня нет продукта & Поставщик POCO.Использование динамического списка объектов в запросах соединения dapper

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-запрос был что-то, как показано ниже, как бы мой щеголеватый запрос будет с ReturnType из IEnumerable<dynamic>

select Products.ProductId,Products.ProductName,Products.ProductCategory, ProductPrice.Amount,ProductPrice.Currency 
           from Products join ProductPrice 
            on Products.ProductId = ProductPrice.ProductId 

Все справки искренне признателен.

Благодаря

ответ

0

Да, вы можете отобразить результат ваших запросов к списку динамических объектов (документация 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, который отображает каждую строку таблицы на 2 объекта вместо одного (Product и Supplier), которые затем связаны ссылкой, прежде чем продукт будет возвращен. Я не думаю, что вы могли бы сделать это с помощью динамических объектов, потому что у Dapper не было бы способа узнать, как разделить столбцы между ними. Вы можете подтвердить это с помощью теста, заменив общие параметры <Product, Supplier, Product> на <dynamic, dynamic, dynamic>.

Пропуск множественного отображения просто означает, что возвращенные объекты dynamic будут содержать как объекты Product, так и Supplier, что может быть не проблема для вас.

Смежные вопросы