Skip to content

Instantly share code, notes, and snippets.

@iBener
Last active August 9, 2016 11:33
Show Gist options
  • Save iBener/ce558883790c6f27e6244fc9afa77d89 to your computer and use it in GitHub Desktop.
Save iBener/ce558883790c6f27e6244fc9afa77d89 to your computer and use it in GitHub Desktop.
Execute a query and map it to a list of dynamic objects. Source: ChristineBoersen, https://github.com/aspnet/EntityFramework/issues/2344#issuecomment-172641417
public static class DbContextExtensions
{
public static IEnumerable<dynamic> SqlQuery(this DbContext dbContext, string Sql, Dictionary<string, object> Parameters = null)
{
using (var cmd = dbContext.Database.Connection.CreateCommand())
{
cmd.CommandText = Sql;
if (cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
if (Parameters != null)
{
foreach (KeyValuePair<string, object> param in Parameters)
{
DbParameter dbParameter = cmd.CreateParameter();
dbParameter.ParameterName = param.Key;
dbParameter.Value = param.Value;
cmd.Parameters.Add(dbParameter);
}
}
//var retObject = new List<dynamic>();
using (var dataReader = cmd.ExecuteReader())
{
while (dataReader.Read())
{
var dataRow = GetDataRow(dataReader);
yield return dataRow;
}
}
}
}
private static dynamic GetDataRow(DbDataReader dataReader)
{
var dataRow = new ExpandoObject() as IDictionary<string, object>;
for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++)
dataRow.Add(dataReader.GetName(fieldCount), dataReader[fieldCount]);
return dataRow;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment