當前位置:首頁 » 編程語言 » sql轉linq

sql轉linq

發布時間: 2023-04-24 08:42:11

1. LINQ比一般的sql語句效率更高嗎

Linq是一個范圍比較大的概念,它其中不單單只有linq to sql,還有相應的linq to xml等等。所以拿linq 與SQL語句相比,沒有可比性的。

但如果拿linq to sql相比的話,與SQL還是有很大的可比性的。一般情況下,你必須要明白你所指的效率是哪一方面?是資料庫執行效率?還是整體成品軟體運行效率?還是開發效率?

開發效率上linq to sql顯然要比SQL的效率要高很多,我們使用linq to sql 可以很容易實現編程,其中的代碼量也大大減少。所以如果從開發方面linq to sql的效率是毫無疑問要高於直接的SQL與資料庫連接。

如果從編方譯考慮,這個一般情況下,linq to sql是引入的新的技術,效率肯定是不如SQL的。好在這個編譯的部分不需要開發人員或是任何用戶的參與,所以即是效率差一點,對軟體來說沒有任何的影響。

最後一部分你可以比較感興趣,誰對資料庫的連接更快,執行效率更好?答案是linq to sql而不是直接的語句。一般我們使用直接的語句要求的是即是的執行,但事實上很多時間我們根本不需要那麼多,linq to sql其實說明了就是會自動生成與表結構同樣的一些對象。而這些對象在聯系資料庫時也是直接編譯好的語句,直接聯系時,兩者效率是相同的。

但是,如果我們對數據進行處理時,你就會發現,linq to sql的效率為什麼會更高了!因為他在讀取時不但會讀取當前表來填充生成的對象,同時還是延時讀其相關表,為你使用有關系的表提供了極大的方便。那麼你的相關表的讀取效率要快了!

但不管怎麼樣,他們都是在站立在了ado.net的基礎之上的,只不過有些自動生成了,根本不需要你再去做而已。唯一效果比較差的是,linq to sql讀出的數據在系統中被轉化了,同時它效率雖然變差一些,但是卻帶來了另一個好處,就是我們常說的SQL注入問題不再出現,你所輸入的任何東西都會變成了字元串了。

其實ADO.net的方案中我們使用了datareader方案的效高是比較高的,但是對於更新卻是極差的。而使用數據適配器的方案效率較底一些,更對於數據的更新是相當好的,而對於linq to sql其實它是使用數據緩存方案,也就是說linq to sql其實將資料庫中的數據緩存到了對象中,如果對象發生了更改,有必須過行返饋時,它是可以進行反饋的,而是這種反饋是可控制的,事務性的。從各方面給我們帶來了好處。

我們可以在更新了很多內容之後再去提交更改,那麼這種效率論從理解上還是效率上都優化你的原來的語句的!所以linq to sql並非在性能上的降低,而是一種提高。

嚴格說來,linq to sql並不是節省了代碼,相反它增加了很多代碼,便幸運的是,這些代碼都是由linq to sql框架自動生成的。若是換作人工,容易出錯的。但在使用時,由於框架完成了大部分的代碼,我們再使用linq to sql加上lambad表達式或查詢表達式,我們的代碼就變得極少且極簡潔了!而如果使用lambad表達式或查詢表達式時,它的效率顯然不如直接SQL來的直接。讀取效率會變得差一些的!

這是因為lambda表達式或查詢表達式是一個動態編譯的效果,而不是直接編譯好的,他要對語句進行編譯與優化以何證效率,但性能上因為多了一重處理,效率沒有SQL來的直接。但一般情況下,使用linq to sql配合查詢表達式或lambad表達式時,效率雖然稍差,但是帶來的卻是代碼的簡潔與易理解性,如果不配合查詢表達式與lambad表達式,linq to sql的優劣還不利用體現。所以關非linq to sql的效率差,而是我們使用了查詢表達式的動態編譯導致了效率較差。就linq to sql本身上來就,效率並不差的!

2. SQL語句轉化為Linq語句

分少點!回頭幫我的團隊打工償還吧!O(∩_∩)O哈哈~
-------------
我的表是Table_1s和Table_2s
linq 查詢如下:
from t in Table_1s
join f in Table_2s on t.B equals f.Key into FD
from f in FD.Where(b=>b.RowName=="B").DefaultIfEmpty()
join s in Table_2s on t.C equals s.Key into FDS
from s in FDS.Where(b=>b.RowName=="C").DefaultIfEmpty()
select new
{
A=t.A,
B=f.Value,
C=s.Value
}
---
對應sql如下:
-- Region Parameters
DECLARE @p0 NVarChar(1) SET @p0 = 'B'
DECLARE @p1 NVarChar(1) SET @p1 = 'C'
-- EndRegion
SELECT [t0].[A], [t1].[value] AS [B], [t2].[value] AS [C]
FROM [Table_1] AS [t0]
LEFT OUTER JOIN [Table_2] AS [t1] ON ([t1].[RowName] = @p0) AND ([t0].[B] = [t1].[key])
LEFT OUTER JOIN [Table_2] AS [t2] ON ([t2].[RowName] = @p1) AND ([t0].[C] = [t2].[key])
---
應該滿足你的要求!

3. 請問一下SQL中的CASE When 在Linq中應該如何去使用

三四項簡單的處理可以用三目表達式直接寫;
四項以上或者有復雜的處理最好就使用外接函數或者自定義資料庫函數或者資料庫存儲過程了。

4. linq to sql 通用查詢語法 return db.Set<T>().Where<T>(wherelambda).AsQueryable();

Linq是延遲查詢的。


測試(以下查詢,查詢分析器中跟蹤是帶where條件的):

privatevoidButton_Click(objectsender,RoutedEventArgse)
{
List<v_plancase>list=GetData(p=>p.xh==1).ToList();
}
///<summary>
///查詢
///</summary>
///<paramname="ExpWhere">查詢條件</param>
///<returns></returns>
staticIQueryable<v_plancase>GetData(Expression<Func<v_plancase,bool>>ExpWhere)
{
TESTEntitiesdb=newTESTEntities();
returndb.v_plancase.Where(ExpWhere).AsQueryable();
}

詳細介紹:

在用戶創建 LINQ 查詢後,該查詢將轉換為一個命令目錄樹。 命令目錄樹是與實體框架兼容的查詢表示形式。 然後,針對數據源執行該命令目錄樹。 在執行查詢時,將計算所有查詢表達式(即查詢的所有組成部分),包括在結果具體化中使用的那些表達式。

執行查詢表達式的時間點可能會有所不同。 LINQ 查詢始終在循環訪問查詢變數時執行,而不是在創建查詢變數時執行。 這稱為「延遲執行」。 您也可以強制立即執行查詢,這對於緩存查詢結果很有用。

當執行 LINQ to Entities 查詢時,查詢中的有些表達式可能在伺服器上執行,而有些部分可能在客戶端上本地執行。 表達式的客戶端計算發生於在伺服器上執行查詢之前。 如果在客戶端上計算表達式,則該計算的結果將替換查詢中的表達式,然後在伺服器上執行查詢。 因為是對數據源執行查詢,所以數據源配置將重寫客戶端中指定的行為。 例如,null 值處理和數值精度取決於伺服器設置。 在查詢執行期間在伺服器上引發的任何異常都將直接向上傳遞到客戶端。


參考MSDN文檔:http://msdn.microsoft.com/zh-cn/library/vstudio/bb738633(v=vs.100).aspx

5. 有沒有直接把sql語句轉換成linq的,或者反轉的工具

Linq pad 紅書
可以把linq轉成sql,或者SQL Server Profiler抓取執行的sql語句

6. c# LINq實現SQL

varresult=fromarrinsite_jwserver
grouparrbyarr.s_ipintog
selectnew
{
cont=g.Count(),
s_ip=g.Key
};

foreach(varvinresult)
//v.cont
//v.s_ip

熱點內容
jrtplib編譯 發布:2024-11-01 18:06:01 瀏覽:226
java代碼中if 發布:2024-11-01 18:02:40 瀏覽:377
android定時刷新 發布:2024-11-01 17:59:43 瀏覽:999
炎黃解說我的世界伺服器生存 發布:2024-11-01 17:59:42 瀏覽:542
如何清楚網頁緩存 發布:2024-11-01 17:53:58 瀏覽:552
linux文件許可權不夠 發布:2024-11-01 17:53:19 瀏覽:917
c語言中10是什麼意思 發布:2024-11-01 17:45:08 瀏覽:892
裝棉衣壓縮袋 發布:2024-11-01 17:37:18 瀏覽:297
android40ble藍牙 發布:2024-11-01 17:36:58 瀏覽:712
資料庫表對比 發布:2024-11-01 17:18:42 瀏覽:985