Created
December 11, 2019 16:34
Call a query with EF Core's DatabaseFacade
This file contains 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 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