【发布时间】:2017-08-15 17:59:45
【问题描述】:
我刚刚检查了 Entity Framework Core 2.0 中的新未来。其中有一个非常好的特性,称为 “原始 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 这样的方法来了解其字符串参数是如何创建的?
【问题讨论】:
-
我正在关注 C# 功能 6 和 7,但我以前从未听说过这样的功能!?怎么写
FromSQL这样的方法? -
@mehrandvd 虽然我不声称知道他们是如何做到的,但正在发生的事情是,在他们提取字符串中找到的占位符的方法中,用它们创建参数并替换带有参数名称的字符串。
-
@Vanna 我的问题是关于
FromSql。你的意思是它用参数替换所有值?例如,如果我有AND IsActive = 1,它会创建另一个@p2,尽管没有被插值? -
大概,
FromSql接受FormattableString,而不是string。 -
另一个关于字符串插值的类似问题stackoverflow.com/questions/29068194/…
标签: c#