這個特性使得你可以在c#中使用sql類似風格的語句,也被稱作linq(語言整合查詢)。
舉例來說,你可以這樣描述你的資料:
ublic class coordinate
在c#裡,你可以像下面一樣輕鬆的宣告乙個資料庫表的邏輯等同式:
// use object and collection initializers
listcoords = ... ;
現在你的資料可以作為乙個collection來實現 ienumerable
,你可以輕鬆的像如下方式查詢資料:
var filteredcoords =
from c in coords
where x == 1
select (c.x, c.y)
在以上sql風格的格式中,"from"、"where"和"select"是查詢表示式,用到了c# 3.0的一些特性如匿名型別,擴充套件方法,隱式型別本地變數等。這樣,你可以使用sql風格的格式,將無聯絡的資料整合一起來工作。
每個查詢表示式實際上轉變為乙個c#的呼叫,如:
where x == 1
將會轉換為:
coords.where(c =>c.x == 1)
你可以看到,這個看上去很像乙個可怕的lambda表示式和擴充套件方法。c# 3.0還有其他很多關於它們的查詢表示式和規則。
表示式樹
c# 3.0包含了乙個新型別,允許表示式能夠當作執行時的資料使用。這個型別,system.expressions.expression
,只是乙個記憶體中乙個lambda表示式的重新表達。結果是你的**可以在執行時修改和檢查lambda表示式。
如下是乙個表示式樹的例子:
expressionfilter = () =>console.writeline("hiya!!") ;
使用如上的表示式樹的方法,你可以使用過濾器變數中的各種屬性來檢查樹的內容。
結束語c# 3.0提供了一些新的特性,使得你可以更輕鬆的完成乙個程式設計師和架構設計師的工作,同時也保持了程式語言的嚴謹和清晰的結構。
c# 3.0目前還處於襁褓中,還將在未來的數月中長大,但是它所能改變的一切,緊靠其強大的後盾.net框架,它的體系結構和設計模式,值得你的關注。
查詢表示式
版本 新增功能 5.0.9 比較運算增加閉包子查詢支援 5.0.4 支援對同乙個字段多次呼叫查詢方法 查詢表示式支援大部分的sql查詢語法,也是 thinkphp 查詢語言的精髓,查詢表示式的使用格式 where 欄位名 表示式 查詢條件 where or 欄位名 表示式 查詢條件 表示式不分大小寫...
查詢表示式解析
查詢表示式解析 1 ienumerablequery from s in names where s.length 5 orderby s select s.toupper 在語義上等同於如下 方法風格 基於方法 的查詢 ienumerablequery names where s s.length...
查詢表示式理解
listp new list p.add new product p.add new product p.add new product p.add new product p.add new product p.add new product ienumerablelist2 from x in ...