Skip to content

Instantly share code, notes, and snippets.

@Vaccano
Created December 11, 2019 16:34
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