The DapperRow
object is designed to share a lot of state between rows. For example, if you fetch 40 rows, the column names etc are only stored once. If we used ExpandoObject
, this would need to be configured per row. Hence, the use of DapperRow
as the behind-the-scenes implementation detail is a deliberate efficiency thing.
Note that the object returned from the dynamic
APIs can also be cast as IDictionary<string,object>
.
I would, however, be open to supporting other types that support this dictionary usage - of which ExpandoObject
is one. So yes, it could be changed such that:
var rows = conn.Query<ExpandoObject>(...);
works. It simply requires code to support it, and that code does not currently exist. So "no, but perhaps in a future build".
Note also that you don't need to use DapperRow
at all... The more expected scenario is to use the generic API to materialize your own types.