I have an unknown amount of parameters for my inclause. How can I write it so it works with 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();
I think it is because each value in the in clause needs it's own Parameter.
Since you're using SQL Server, you can pass the list of values as 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();
来源:https://stackoverflow.com/questions/53016130/how-to-write-in-clause-with-ef-fromsql