Last active
August 9, 2016 11:33
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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