根据本文档(https://www.learnentityframeworkcore.com/raw-sql/from-sql)你应该这样做:
string value = "value";
_dbContext.Set<T>().FromSqlInterpolated($"SELECT * FROM Table WHERE ColumnName LIKE '%{value}%'");
使用
FormatableString
时的结果相同:
FormatableString sql = "SELECT * FROM Table WHERE ColumnName LIKE '%{value}%'"
_dbContext.Set<T>().FromSqlInterpolated(sql);
将 sql 查询分析为字符串后,结果是:
"SELECT * FROM Table WHERE ColumnName LIKE '%{0}%'"
我错过了什么或做错了什么?什么时候应该使用
FromSqlRaw
或 FromSqlInterpolated
?
您可以将 FromSqlRaw 与字符串和单引号一起使用:
string value = "value";
string sql = $"SELECT * FROM Table WHERE ColumnName LIKE = '%{value}%'";
_dbContext.Set<T>().FromSqlRaw(sql);
或者使用 FormattableString 且不带单引号的 FromSql/FromSqlInterpolated:
string value = "%value%";
FormattableString sql = $"SELECT * FROM Books WHERE Title LIKE {value}";
_dbContext.Set<T>().FromSqlInterpolated(sql);