Skip to content

Instantly share code, notes, and snippets.

@timdows
Last active July 22, 2016 13:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timdows/59b04f65f52af8eec5f0e86ee3d5a865 to your computer and use it in GitHub Desktop.
Save timdows/59b04f65f52af8eec5f0e86ee3d5a865 to your computer and use it in GitHub Desktop.
RawSqlExecute in ASP.NET Core with EntityFramework Core 1.0
public class RawSqlExecute
{
/// <summary>
/// Plain text sql query to a list that can easaly be transformed to a json object
/// </summary>
/// <param name="dataContext"></param>
/// <param name="sql"></param>
/// <returns>Dynamic list</returns>
public static List<dynamic> GetDynamicResults(
DataContext dataContext,
string sql)
{
using (var command = dataContext.Database.GetDbConnection().CreateCommand())
{
command.CommandText = sql;
if (command.Connection.State != ConnectionState.Open)
{
command.Connection.Open();
}
return GetRecords(command);
}
}
/// <summary>
/// Stored Procedure with SqlParameters to a list that can easaly be transformed to a json object
/// </summary>
/// <param name="dataContext"></param>
/// <param name="storedProcedureName"></param>
/// <param name="sqlParameters"></param>
/// <returns>Dynamic list</returns>
public static List<dynamic> GetDynamicResults(
DataContext dataContext,
string storedProcedureName,
List<SqlParameter> sqlParameters)
{
using (var command = dataContext.Database.GetDbConnection().CreateCommand())
{
command.CommandText = storedProcedureName;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddRange(sqlParameters.ToArray());
if (command.Connection.State != ConnectionState.Open)
{
command.Connection.Open();
}
return GetRecords(command);
}
}
private static List<dynamic> GetRecords(DbCommand command)
{
var records = new List<dynamic>();
using (var dataReader = command.ExecuteReader())
{
while (dataReader.Read())
{
var dataRow = new ExpandoObject() as IDictionary<string, object>;
for (var i = 0; i < dataReader.FieldCount; i++)
{
var name = dataReader.GetName(i);
var value = dataReader[i]?.ToString();
dataRow.Add(name, value);
}
records.Add((ExpandoObject) dataRow);
}
}
return records;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment