亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# 6.0 內插字符串(Interpolated Strings )的使用方法

2019-10-29 19:41:19
字體:
來源:轉載
供稿:網友

看Interpolated Strings之前,讓我們先看EF Core 2.0 的一個新的特性:String interpolation in FromSql and

ExecuteSqlCommand。

var city = "London";using (var context = CreateContext()){ context.Customers  .FromSql($@"   SELECT *   FROM Customers   WHERE City = {city}")  .ToArray();}

SQL語句以參數化的方式執行,所以是防字符串注入的。

@p0='London' (Size = 4000)SELECT *FROM CustomersWHERE City = @p0

一直認為Interpolated Strings只是String.Format的語法糖,傳給FromSql的方法只是一個普通的字符串,已經移除了花括號,并把變量替換成了對應的值。FromSql獲取不到變量信息,怎么實現參數化查詢的呢? OK,讓我們從頭看起吧。

什么是內插字符串 (Interpolated Strings)

內插字符串是C# 6.0 引入的新的語法,它允許在字符串中插入表達式。

var name = "world";Console.WriteLine($"hello {name}");

這種方式相對與之前的string.Format或者string.Concat更容易書寫,可讀性更高。就這點,已經可以令大多數人滿意了。事實上,它不僅僅是一個簡單的字符串。

內插字符串 (Interpolated Strings) 是什么?

用代碼來回答這個問題:

var name = "world";string str1 = $"hello {name}"; //等于 var str1 = $"hello {name}";IFormattable str2 = $"hello {name}";FormattableString str3 = $"hello {name}";

可以看出,Interpolated Strings 可以隱式轉換為3種形式。實際上式編譯器默默的為我們做了轉換:

var name = "world";string str1 = string.Format("hello {0}",name); //等于 var str1 = $"hello {name}";IFormattable str2 = FormattableStringFactory.Create("hello {0}",name);FormattableString str3 = FormattableStringFactory.Create("hello {0}",name);
  • IFormattable 從.net Framwork 1 時代就有了,只有一個ToString方法,可以傳入IFormatProvider來控制字符串的格式化。今天的主角不是他。
  • FormattableString 伴隨Interpolated Strings引入的新類。

FormattableString 是什么?

先看一段代碼

var name = "world";FormattableString fmtString = $"hello {name}";Console.WriteLine(fmtString.ArgumentCount); //1Console.WriteLine(fmtString.Format); //hello {0}foreach (var arg in fmtString.GetArguments()){ Console.WriteLine(arg); //world Console.WriteLine(arg.GetType()); //System.String}

可以看出FormattableString保存了Interpolated Strings的所有信息,所以EF Core 2.0能夠以參數化的方式來執行SQL了。

EF Core 中的注意事項

因為隱式轉換的原因,在使用EF CoreFromSql 方法和 ExecuteSqlCommand方法時,需要特別小心。一不留神就會調入陷阱。

var city = "London";using (var context = CreateContext()){ //方法一,非參數化 var sql = $" SELECT * FROM Customers WHERE City = {city}"; context.Customers.FromSql(sql).ToArray(); //方法二,參數化 context.Customers.FromSql($" SELECT * FROM Customers WHERE City = {city}").ToArray(); //方法三,參數化 FormattableString fsql = $" SELECT * FROM Customers WHERE City = {city}"; context.Customers.FromSql(fsql).ToArray(); //方法四,非參數化 var sql = " SELECT * FROM Customers WHERE City = @p0"; context.Customers.FromSql(sql, city).ToArray();}

第一種方法,因為sql的賦值被編譯成String.Format方法的調用,返回的是字符串。sql變量傳入FromSql方法時,又經過一次System.String Microsoft.EntityFrameworkCore.RawSqlString隱式轉換。但sql變量本身已經丟失了參數信息,所以無法實現參數化的查詢。

第四種方法, 也是Interpolated Strings -> String -> RawSqlString的轉換過程,但因為變量是分開傳入FromSql方法的,所以是以參數化的方式執行的。

其他

熟悉ES2015的同學可以看看Javascript中的實現,Tagged template literals,這和Interpolated Strings 非常類似。

昨晚凌晨12點發帖,不知道為什么被移除首頁了。感覺是篇幅不夠的原因,重新加了點EF Core注意事項,但超過1小時沒辦法重新回首頁了。七年來的第一篇文章,有點遺憾。希望大家喜歡。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品自产拍高潮在线观看| 久久精品国产69国产精品亚洲| 全球成人中文在线| 欧美日韩在线一区| 久久免费福利视频| 欧美日韩精品在线| 亚洲视频在线看| 91精品久久久久久久久久| 日韩欧美国产视频| 精品中文字幕久久久久久| 久久精品欧美视频| 欧美中文字幕第一页| 国产主播喷水一区二区| 亚洲国产精彩中文乱码av在线播放| 在线国产精品播放| 欧美成人精品xxx| 欧美日韩亚洲视频| 国产精品网红福利| 国产精品一区二区av影院萌芽| 国产精品爽爽ⅴa在线观看| 在线精品播放av| 亚洲图片欧洲图片av| 精品视频www| 永久免费毛片在线播放不卡| 亚洲综合在线中文字幕| 日韩精品日韩在线观看| 精品中文字幕久久久久久| 2020欧美日韩在线视频| 26uuu另类亚洲欧美日本老年| 中文字幕日韩av综合精品| 日韩欧美一区二区在线| www.欧美免费| 日韩美女写真福利在线观看| 成人免费视频网| 日本久久久久久久久久久| 欧美成人精品一区二区| 日韩av在线一区| 亚洲国产精品视频在线观看| 欧美疯狂做受xxxx高潮| 国产日韩欧美另类| 欧美大人香蕉在线| 国产女人精品视频| 国产欧美久久一区二区| 欧美尺度大的性做爰视频| 欧美精品在线免费| 欧美高清视频在线| 精品国产区一区二区三区在线观看| 色偷偷av亚洲男人的天堂| 亚洲精品大尺度| 日韩欧美有码在线| 中文字幕成人在线| 日韩一级黄色av| 精品久久中文字幕| 日本精品性网站在线观看| 国产精品日韩专区| 久久欧美在线电影| 日韩hd视频在线观看| 欧美孕妇性xx| 亚洲国产精品视频在线观看| 奇米四色中文综合久久| 韩国三级电影久久久久久| 欧美视频中文在线看| 精品亚洲一区二区| 亚洲国产欧美久久| 97成人精品区在线播放| 国产精品久久在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久精品视频免费播放| 日韩最新中文字幕电影免费看| 日韩专区在线观看| 夜色77av精品影院| 精品高清一区二区三区| 精品人伦一区二区三区蜜桃网站| 久久久av电影| 国产美女91呻吟求| 成人妇女免费播放久久久| 日本精品免费一区二区三区| 国产精品视频一区二区高潮| 国产精品三级美女白浆呻吟| 国产视频久久网| 成人美女av在线直播| 夜夜嗨av色综合久久久综合网| 亚洲少妇中文在线| www.亚洲人.com| 日韩av在线免播放器| 成人激情在线播放| 欧美中文在线字幕| 亚洲图片欧洲图片av| 欧美日韩国产va另类| 久久久精品一区二区三区| 亚洲精品99999| 色噜噜亚洲精品中文字幕| 国产日本欧美一区| 久热99视频在线观看| 国产+人+亚洲| 欧美亚洲视频一区二区| 最近日韩中文字幕中文| 亚洲欧美激情一区| 一区二区三区在线播放欧美| 91精品国产综合久久久久久久久| 亚洲free性xxxx护士hd| 久久久久国色av免费观看性色| 国产91精品久久久久久久| 亚洲视屏在线播放| 国产精品偷伦免费视频观看的| www.日韩免费| 美女国内精品自产拍在线播放| 欧美一区二区大胆人体摄影专业网站| 欧美性xxxxxxxxx| 一区二区在线视频| 欧美日韩亚洲国产一区| 成人激情视频在线播放| 日韩av影院在线观看| 欧美日韩在线另类| 久久精品免费播放| 欧美视频在线免费看| 久久久女女女女999久久| 国产亚洲视频在线| 中文字幕欧美视频在线| 91sa在线看| 俺也去精品视频在线观看| 久久激情视频久久| 九九精品在线观看| 668精品在线视频| 亚洲高清免费观看高清完整版| 亚洲精品一区av在线播放| 国产精品色视频| 精品国产视频在线| 国产成人福利视频| 日韩精品视频在线观看网址| 深夜精品寂寞黄网站在线观看| 亚洲性生活视频在线观看| 国产欧美韩国高清| 亚洲男人天堂网| 国产丝袜精品视频| 亚洲精品中文字幕女同| 日韩精品福利网站| 亚洲成在人线av| 欧洲成人午夜免费大片| 亚洲精品乱码久久久久久金桔影视| 亚洲综合色激情五月| 欧美激情videoshd| 国产日韩欧美一二三区| 亚洲最大的免费| 国产精品精品视频一区二区三区| 亚洲成人三级在线| 欧美激情一区二区久久久| 亚洲色图激情小说| 26uuu亚洲伊人春色| 成人性生交大片免费观看嘿嘿视频| 美女999久久久精品视频| 欧美主播福利视频| 国产成人精品一区| 久久精品国产成人精品| 91亚洲精品一区| 成人国内精品久久久久一区| 日本19禁啪啪免费观看www| 欧美国产日本在线| 亚洲一区中文字幕| 色999日韩欧美国产| 欧美午夜片欧美片在线观看| 欧美日韩免费区域视频在线观看| 成人综合国产精品| 成人福利在线视频|