问题
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.
回答1:
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