我的参数中包含未知数量的参数。如何编写使其与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子句中的每个值都需要它自己的参数。
答案 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();