Как сделать JSON-запрос в C #? - PullRequest
0 голосов
/ 01 октября 2018

Я использую SQL Server 2017 с поддержкой Json.Однако я использую ядро ​​EF, которое не может запрашивать json.

Как мне тогда выполнять запросы?

Пример

  SELECT
      *, JSON_VALUE (Attributes, '$.year') AS Year
  FROM 
      items
  WHERE 
      JSON_VALUE(Attributes, '$.year') = '2017'

Как мне запросить это в C # / ASP.NET Core?ADO.NET?

1 Ответ

0 голосов
/ 02 октября 2018

Я предполагаю, что ваша 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...