Я предполагаю, что ваша items
модель, подобная приведенной ниже:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Attributes { get; set; }
}
Если это так, и вам не нужно Year
, вы можете попробовать FromSql
, как показано ниже:
string sQuery = "SELECT *, JSON_VALUE (Attributes, '$.year') AS Year FROM Customer WHERE JSON_VALUE(Attributes, '$.year') = '2018'";
var customerEF = await _context.Customer.FromSql(sQuery).ToListAsync();
Для этого способа вы можете возвращать только столбцы, определенные в Customer
модели.
Если вы хотите вернуть столбцы в столбцах Customer
и Year
, я предлагаю вам попробовать Dapper , например:
using (var connection = new SqlConnection(_configuration.GetConnectionString("DefaultConnection")))
{
string sQuery = "SELECT *, JSON_VALUE (Attributes, '$.year') AS Year FROM Customer WHERE JSON_VALUE(Attributes, '$.year') = '2018'";
var customerDapper = connection.QueryFirstOrDefault<CustomerVM>(sQuery);
}
С Dapper
, определитьновая модель со столбцом Year
:
public class CustomerVM: Customer
{
public string Year { get; set; }
}
Обновление
Избегайте SQL-инъекций.
Попробуйте передать параметры SQL.
string sQuery = "SELECT *, JSON_VALUE (Attributes, '$.year') AS Year FROM Customer WHERE JSON_VALUE(Attributes, '$.year') = @Year";
var year = new SqlParameter("Year", "2018");
var customerEF = await _context.Customer.FromSql(sQuery, year).ToListAsync();