如何使用EF FromSql在子句中编写?

时间:2018-10-26 20:47:55

标签: entity-framework ef-core-2.1

我的参数中包含未知数量的参数。如何编写使其与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 :(得分:1)

由于使用的是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();