대용량 결합 쿼리에서 동적 객체 목록 사용

c# dapper

문제

제품 및 공급 업체 POCO가 없어서 IEnumerable<dynamic> 과 같은 returntype을 사용하여 아래에 작성된 깔끔한 쿼리를 만들 수 있습니까?

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 쿼리가 아래와 같은 경우 어떻게해야합니까? 내 쿼리는 IEnumerable<dynamic>

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

모든 도움은 진심으로 감사드립니다.

감사

수락 된 답변

예. 쿼리 결과를 동적 개체 목록에 매핑 할 수 있습니다 ( 여기 ).

    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);

첫 번째 예제에서는 각 테이블 행을 하나의 Product ( ProductSupplier ) 대신 2 개의 개체로 매핑 하는 멀티 매핑 을 수행하고 제품이 반환되기 전에 참조로 연결됩니다. Dapper는 열을 어떻게 나누는 지 알 수 없기 때문에 동적 인 객체로이 작업을 수행 할 수 있다고 생각하지 않습니다. <Product, Supplier, Product> 일반 매개 변수를 <dynamic, dynamic, dynamic> 대체하여 테스트를 통해이를 확인할 수 있습니다.

멀티 매핑을 건너 뛰면 반환 된 dynamic 객체에는 ProductSupplier 속성이 모두 포함되므로 문제가되지 않을 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.