F#中的插值字符串

7

我正在尝试在F#中使用Entity Framework Core插值SQL查询函数,这需要使用FormattableString。 然而令我惊讶的是,它不能正常工作,因为我找不到将普通的F#字符串转换为该类型的方法。 我认为只需像在C#中所做的那样即可,但它并不起作用。 这是我当前的代码:

let fromDbUser (u : Entity.User) = 
    {
        name = u.Name
        age = u.Age
        phone = u.Phone
    }

let mname = "Foo" 

let ctx = new Entity.DatabaseContext()
ctx.User.FromSqlInterpolated($"Select * FROM User Where name = {mname};") 
|> Seq.map(fromDbUser)
|> printfn "%A"

运行该代码块会产生编译错误:

此令牌保留供将来使用

我一直在尝试谷歌,但是我找不到任何方法让它工作,任何帮助都将不胜感激!

3个回答

11

当被问及此事时,F# 还没有字符串插值(string interpolation)。

然而,如今已经有一个RFC,它已经合并到 F# 5.0 中,使得 F# 可以使用字符串插值。


该错误是因为在 F# 中,$ 符号被保留了六年以上(截至撰写本文),当字符串插值功能被添加时,这个符号可能会被用到。


4

正如 Dave 指出的,插值 (interpolation) 还没有实现。 但是对于绝对需要 FormattableStringIFormattable 的方法,你可以使用 FormattableStringFactory.Create

let query (sql: FormattableString)  = 
    printfn "%s" (sql.ToString(null, null))

let mname = "Foo"         
let fstr = FormattableStringFactory.Create("Select * FROM User Where name = {0};", mname)

query fstr

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接