Как написать в статье с EF FromSql? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть неизвестное количество параметров для моего inclause.Как я могу написать его так, чтобы он работал с EF Core?

  var formattedValues = String.Join(",", values.Select(s => "'" + s + "'"));
            var identifierParam = new SqlParameter("jsonColumn", $"$.{identifierKey}");
            var filterValueParam = new SqlParameter("value", $"%{formattedValues}%");

            var items = dbContext.Items.FromSql("select * FROM Items WHERE  AND JSON_VALUE(Attributes, @jsonColumn) in (@value)", filterValueParam, identifierParam).ToList();

Я думаю, это потому, что для каждого значения в предложении in нужен свой собственный параметр.

1 Ответ

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

Поскольку вы используете SQL Server, вы можете передать список значений как JSON. EG

  var jsonValues = JsonConvert.SerializeObject(values.ToList());
  var filterValueParam = new SqlParameter("@values", jsonValues );
  var identifierParam = new SqlParameter("@jsonColumn", $"$.{identifierKey}");

  var sql = "select * FROM Items WHERE  AND JSON_VALUE(Attributes, @jsonColumn) in (select value from openjson(@values))";

  var items = dbContext.Items.FromSql(sql, filterValueParam, identifierParam).ToList();
...