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!!