Skip to content

Instantly share code, notes, and snippets.

@Vaccano
Created December 11, 2019 16:34
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 Vaccano/99561ffb5b0d1d02ffe18b28edfaa3bf to your computer and use it in GitHub Desktop.
Save Vaccano/99561ffb5b0d1d02ffe18b28edfaa3bf to your computer and use it in GitHub Desktop.
Call a query with EF Core's DatabaseFacade
public static class DbContextHelper
{
public static List<T> SqlQueryList<T>(this DatabaseFacade database, string query, Func<Dictionary<string, object>, T> conversionFunction, params SqlParameter[] sqlParameters)
{
var conn = database.GetDbConnection();
conn.Open();
var command = conn.CreateCommand();
command.CommandText = query;
command.Parameters.AddRange(sqlParameters);
var reader = command.ExecuteReader();
List<T> result = new List<T>();
while (reader.Read())
{
var row = new Dictionary<string, object>();
var columns = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList();
Object[] values = new Object[reader.FieldCount];
var gotValuesSuccessfully = reader.GetValues(values);
if (gotValuesSuccessfully > 0)
{
for (int i = 0; i < reader.FieldCount; i++)
{
row.Add(columns[i], values[i]);
}
var typedRow = conversionFunction(row);
result.Add(typedRow);
}
}
return result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment