linq查詢數(shù)據(jù)庫 LinQ可以取代SQL語句嗎?
LinQ可以取代SQL語句嗎?LINQ查詢和更新數(shù)據(jù)基本上可以代替SQL語句,但是數(shù)據(jù)庫文件的創(chuàng)建和刪除等維護(hù)工作不能代替SQL語句。當(dāng)然,VS2010也可以用來創(chuàng)建數(shù)據(jù)庫文件,但是它不像SQL語言那
LinQ可以取代SQL語句嗎?
LINQ查詢和更新數(shù)據(jù)基本上可以代替SQL語句,但是數(shù)據(jù)庫文件的創(chuàng)建和刪除等維護(hù)工作不能代替SQL語句。當(dāng)然,VS2010也可以用來創(chuàng)建數(shù)據(jù)庫文件,但是它不像SQL語言那樣方便用于數(shù)據(jù)庫工具。對于過濾、排序、匯總、提取字段、分組和聯(lián)接等查詢,LINQ與SQL基本相同,并且還有一個lambda表達(dá)式。
在C#中引入LINQ,以了解編寫和編譯數(shù)據(jù)庫代碼時是否有錯誤,并在編寫時得到LINQ類庫提示,如添加屬性成員和關(guān)鍵字提示,使編程簡單方便。如果不使用LINQ,SQL語句只能以字符串的形式嵌入到執(zhí)行語句中。編譯時找不到字符串錯誤,運(yùn)行時很煩人。
另一個優(yōu)點是LINQ發(fā)展到LINQ to SQL,可以用O/R設(shè)計器處理數(shù)據(jù)庫,用C#將數(shù)據(jù)庫映射到類,為數(shù)據(jù)庫的可視化編程提供了方便。參見“C#編程指南”(姚丹,清華大學(xué)出版社,2011年1月,可在線購買)。本書詳細(xì)討論了LINQ處理數(shù)據(jù)庫。有很多例子來演示如何更新、排序和優(yōu)化AdventureWorks2008(和dw2008,lt2008)的連接,后者是sql2008的一個示例數(shù)據(jù)庫。
IQueryble、IEnumerable是什么關(guān)系有什么區(qū)別,Linq查詢返回的是什么類型的數(shù)據(jù)?
這兩個查詢的內(nèi)部處理機(jī)制不同。where的返回類型為iqueryable,參數(shù)為expression。LINQ查詢返回IEnumerable類型
謝謝。
首先,SQL只是關(guān)系數(shù)據(jù)庫的查詢前端,不是關(guān)系數(shù)據(jù)庫的必要部分。只是每個人都按照國際慣例實現(xiàn)了這個接口。你也可以做數(shù)據(jù)日志,教程D或其他利基DSL。其他的,比如referencedb、CouchDB或mongodb,當(dāng)然使用js作為查詢語言。畢竟,SQL不適合這種無模式的場景。
另外,大多數(shù)關(guān)系數(shù)據(jù)庫實現(xiàn)只需編譯一次SQL,將其轉(zhuǎn)換為特定的語法樹,然后執(zhí)行查詢計劃,并使用索引和其他信息進(jìn)行優(yōu)化。與連接/調(diào)用數(shù)據(jù)庫的每個應(yīng)用程序相比,所有這些操作都被SQL完全隱藏起來。無論使用哪種編程語言/平臺,都將有一個統(tǒng)一的實現(xiàn)。這樣就節(jié)省了為每種主流編程語言設(shè)計一組接口的成本。
第三點是,SQL不僅適用于程序員,也適用于各種系統(tǒng)分析師、數(shù)據(jù)分析師甚至一些高級管理人員。因此,SQL只是一種“查詢語言”,而不是一種通用編程語言。因此,它更多地用于描述數(shù)據(jù)和關(guān)系,特別是當(dāng)需要組合/連接多個關(guān)系時,通用編程語言的表示可能不像SQL那樣直接。否則,微軟為什么要費(fèi)心用C語言構(gòu)建一組LINQ呢。