查詢表示式

2021-06-21 23:14:51 字數 1184 閱讀 2363

這個特性使得你可以在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 ...