В настоящее время невозможно получить результат запроса при использовании ExecuteSqlInterpolatedAsyn c. То же относится и к любым дополнительным операторам LINQ.
Однако вы можете использовать базовый ADO. net Provider:
public IList<IDictionary<string, dynamic>> SelectDynamic(string table)
{
using (var command = Database.GetDbConnection().CreateCommand())
{
command.CommandText = $"SELECT * FROM [{table}]";
command.CommandType = CommandType.Text;
Database.OpenConnection();
using (var result = command.ExecuteReader())
{
var entities = new List<IDictionary<string, dynamic>>();
while (result.Read())
{
var dict = new Dictionary<string, dynamic>();
for (int i = 0; i < result.FieldCount; i++)
{
dict.Add(result.GetName(i), result.GetValue(i));
}
entities.Add(dict);
}
return entities;
}
}
}
Добавьте это в свой класс DbContext и вызовите его с помощью:
using (var context = new MyDbContext()) // Or get it with DI, depends on your application
{
var count = context.SelectDynamic("samaster").Where(d => d["CODE"] == productBrandCode && d["WAREHOUSE"] == warehouse).Count();
}
Остерегайтесь, однако, это дорогостоящая операция, если в вашей таблице много строк! Альтернативный подход для извлечения только релевантных результатов состоит в замене
command.CommandText = $"SELECT * FROM [{table}]";
на
command.CommandText = $"SELECT CODE FROM [samaster] WHERE CODE={productBrandCode} AND WAREHOUSE={warehouse}";
и передаче параметров в качестве параметров функции.
public IList<IDictionary<string, dynamic>> SelectDynamic(string productBrandCode, string warehouse)
{...
Также убедитесь, что экранированы все параметры, если они каким-либо образом представлены пользовательским вводом, чтобы предотвратить SQL Атаки с помощью инъекций!