재우니의 블로그

C# Dapper 동적 값을 반환하는 방법

 

model 을 만들지 않고 곧바로 dynamic 키워드를 사용하여 아래와 같이 값을 추출할 수가 있습니다. 단 배열방식 [0]..[1] 이런식으로는 되지 않습니다.

dynamic account = conn.Query<dynamic>(@"
                    SELECT Name, Address, Country
                    FROM Account
            WHERE Id = @Id", new { Id = Id }).FirstOrDefault();
Console.WriteLine(account.Name);
Console.WriteLine(account.Address);
Console.WriteLine(account.Country);

 

여러 건일 경우는 foreach 구문을 통해 접근이 가능합니다. 배열방식으로 얻을 순 없습니다.

IEnumerable<dynamic> query = db.Query<dynamic>("SELECT SUM(UserRating) as 'Sum', AVG(UserRating) as 'Average', COUNT(*) as 'Total' FROM ActivityLogs");
foreach (var rows in query)
{
    var fields = rows as IDictionary<string, object>;
    var sum = fields["Sum"];
    // ...
}

 

아래와 같이 작업하면 오류가 발생합니다.

var query = db.Query("SELECT SUM(UserRating) as 'Sum', AVG(UserRating) as 'Average', COUNT(*) as 'Total' FROM ActivityLogs");

query.FirstOrDefault(); // {{DapperRow, Sum= '3', Average = '3', Total = '1'}}
var sum = query[0].Sum; // error!!