查詢語言LINQ 1

2021-04-13 09:58:09 字數 2380 閱讀 5912

查詢語言linq

static void main();

ienumerablequery=from s in names

where s.length==5

orderby s

select s.toupper();;

foreach(string item in query){

console.writeline(item);

我們看from s in names where….來看很有sql的感覺,但是我們一開始不要直接和sql聯絡,我們應該從語言底層如何運作來看。其實這裡我們要做的是從s中找到字串長度為5的並且對它們排序轉換成大寫,最後通過輸出方法輸出到控制台。我們這裡需要強調的就是中間的**,我們利用傳統的方式來做同樣的事情,我們也能達到,首先我們找到長度為5的字串,然後排序,然後轉換成大寫。從**量上來考慮,我們可能需要些更多的**,我們可以仔細的左對比,包括從思維方式上。作為程式設計師,我們要很好的理解抽象,必須從底層著眼,才能理解的更透徹。

ienumerablequery=from s in names

where s.length==5

orderby s

select s.toupper();;

上邊的這段**在語義上等同如下「方法風格的查詢」:

ienumerablequery=names.where(s=>s.length==5)

.orderby(s=>s)

.select(s=>s.toupper());

如大家看到的一樣,其實我們在names上呼叫方法,我們在字串陣列上掉用方法,wehre方法中的引數就是我們的lambda表示式,後邊的orderby和select方法傳遞的引數都是lambda表示式。我們可以對上邊的那個表示式陌生,但是千萬不能對下邊的表示式陌生。其實下邊的方法風格的查詢很容易理解,很符合我們人的思維。

如果我們把lambda表示式繼續展開的話,就有如下的委託形式:

funcfilter=delegate(string s);

funcextract=delegate(string s);

funcproject=delegate(string s);

ienumberablequery=names.where(filter).

orderby(extract)

.select(project);

這樣的形式。實際上便的形式把我們的linq給展開了,為了大家能看得比較清楚。也就是需要大家從類似sql語句的形式看到最終展開的委託實力的形式。也就是說我們寫的比較自然的語法,在語義上會被轉換成方法的呼叫,很多人可能會問,那裡來的這些方法呢?我們的大家都知道陣列是沒有where或者orderby之類的方法。我們接著討論。

查詢操作符是linq中的另外乙個重要的設施,linq使用擴充套件方法來定義查詢操作符,例如where操作符:

namespace system.linq }}

大家注意where方法上加的方法的this關鍵字,就是我們體驗一中的擴充套件方法的方式。也就是我們為ienumberable<t>新增了乙個新的方法where。那麼方法中到底作了什麼樣的事情,我們看到我們在方法中去找滿足predicate委託的item。查詢操作符號,指的就是我們這裡的where操作符號,也就是我們這裡的批predicate委託中的方法。

普通的方式來呼叫我們的擴充套件方法就如下:

ienumberablequery=enumberable.where(names,s=>length<6);

現在我們的c#語言允許我們以如下的方式來呼叫擴充套件方法:

ienumberablequery=names.where(s=>s.length<6);

或者ienumberablequery=from s in names where s.length<6;

在我們framework的linq命名空間下有所有關於linq的關鍵字,其實這些新的技術,就是對我們之前的老技術的從新審視,用一種更加簡單的方式來表達之前很複雜的語義。我們不是說linq比之前的一些概念有多麼的新,其實我們只是對之前的一些東西更加抽象了。其實學習任何一種語言,技術,我們都不可避免的要從抽象和底層兩個層次來學習,荒廢任何乙個方面都會讓我們走很多彎路。其實linq的出現就是我們在抽象層次的進一步的發展,在資料表達和操作上來講。從技術上來講,我們必須了解這樣語言機制要表達的意思,更為重要的是我們要理解在語言機制下到底是什麼東西。理解底層我們可以更加油效率的去做一些事情,而不是盲目的去做一些事情。任何技術都有它的抽象層次和底層層次,如果我們能把這兩個方面整合起來,那麼我們肯定能夠去把握這門語言的發展趨勢,甚至是他的未來。

終極計算機語言可能就是我們人的自然語言,如果計算機能理解人的語言,那麼我們這些程式設計師可能就要失業了。但是技術就是朝著這個方向去發展的,如何去理解這些抽象而不是被這些抽象所蒙蔽,使我們程式設計師必須認真考慮的地方。

Linq 1查詢語言

查詢語言我們了解很多,大體上他們的思路語言都是相同的,linq也不難,只是我們把它想的太複雜了而已。linq語言整合化查詢 基礎 1,泛型 2,lambda from 元素 in 集合 where 元素條件 orderby 元素.屬性 ascending group 元素 by 元素.屬性 sele...

LINQ 1 擴充套件方法

2.總感覺不是很好,要是看起來字串有乙個isemail方法多好呀。將isemail放到乙個單獨的類中,類宣告為static 靜態類 方法是靜態方法,並且在第乙個string上增加this。哇,string類 增加 isemail方法了,這只是假象,本質上仍然是靜態方法,只不過c 提供了這樣乙個便利給...

了解 語言整合 LINQ 查詢

linq提供了一種跨資料來源和資料格式的同意模型,實現查詢。ienumerable介面在.net中是非常重要的介面,它允許開發人員定義foreach語句功能的實現並支援非泛型方法的簡單的迭代,ienumerable介面是.net framework中最基本的集合訪問器。它定義了一組擴充套件方法,用來...