我刚刚检查了 Entity Framework Core 2.0 中的新 futures。其中有一个非常好的功能,称为“原始 SQL 方法中的字符串插值”,描述为 here .
它说这段代码:
var city = "Redmond";
using (var context = CreateContext())
{
context.Customers.FromSql($@"
SELECT *
FROM Customers
WHERE City = {city}");
}
创建此查询:
SELECT *
FROM Customers
WHERE City = @p0
我真的很奇怪! FromSql
方法是如何编写的,因为它只有字符串类型的输入。
它如何理解它是一个插值字符串,然后为它创建一个参数@p0
查询?我如何编写一个像 FromSql
这样的方法,知道它的字符串参数是如何创建的?
最佳答案
它的工作方式是 FromSql(
accepts a FormattableString
.
当您使用返回 FormatableString
的 $"..."
时,该类允许您检查传入的字符串并查看其中的所有 { }
block 及其代表的对象。这允许框架用占位符参数 @p0
替换那些 { }
block ,然后使用类似于 new SqlParameter("@p0", formatableString.GetArgument(0))
关于c# - 原始 SQL 方法中的字符串插值,这怎么可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698722/