前言:
學過SQL的一看就懂
LINQ代碼很直觀
但是,LINQ卻又跟SQL完全不同
首先來看一下調用LINQ的代碼
int[] badgers = {36,5,91,3,41,69,8}; var skunks = from pigeon in badgers where (pigeon != 36 && pigeon <50) orderby pigeon descending select pigeon + 5; var bears = skunks.Take(3); Debug.Log("Get your kicks on route {0}",weasels.Sum());
LINQ與SQL最大的不同
就在於SQL查詢的是數據庫表,而LINQ查詢的是對象
也就是說,SQL查詢的是集合,而LINQ查詢的是可以儲存的任何內容,可以是值、struct、對象等。
這就形成了最大的區別:SQL表沒有順序,而LINQ查詢的內容是有順序的
從代碼行的不同
SQL語句把SELECT放在第一句
而LINQ將SELECT放在了最后一句
兩者同樣具有where,orderby等語句
LINQ並不只是查詢並獲取數據項
LINQ還提供了管理數據所需要的各種工具
例如上面代碼的 select pigeon + 5;
作用為將每個數字加5后輸出
類似地,還有LINQ定義的一些方法,如Count(),Min(),Max(),Sum(),Average()等
LINQ是什么原理呢
首先,需要循環處理整個對象
然后,將每個值與where條件作比較
最后,收集結果儲存在代碼中以供使用
因此LINQ代碼的優缺點一目了然:
優點:C#把大量行為壓縮到幾行代碼中,可以用很少的代碼完成復雜的工作
缺點:性能相對不高。for手寫代碼比用LINQ代碼速度快十幾倍(網友測試結論)
注意:
LINQ查詢會有“延遲計算”
也就是說,訪問LINQ查詢的結果之前並不會真正運行LINQ查詢
這算是一種性能機制
當然,也可以使用ToList()告訴LINQ立即執行查詢