亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

LINQ基礎概述

系統 1682 0
介紹LINQ基礎之前,首說一下LINQ的歷史和LINQ是什么, 然后說一下學習 LINQ 要了解的東西和 LINQ 基礎語法
LINQ的歷史

從語言方面的進化
委托
匿名方法
Lambda表達式
Linq查詢表達式

上邊這四個我會在下邊一一解說

從時間方面的演進
–2004年
–2005年9月,C#2.0的PDC上發布
–2005年11月,C#2.0預覽版
–2006年1月,VB8.0預覽版
–2007年11月,.net 3.5發布

LINQ是什么

LINQ是語言級集成查詢(Language INtegrated Query)
LINQ是一種用來進行數據訪問的編程模型,使得.NET語言可以直接支持數據查詢
LINQ的目標是降低訪問數據的復雜度
LINQ可以用統一的方法訪問不同類型的數據,可以將數據作為對象使用
能夠更好地與編程模型集成
可以在Visual Studio中進行智能提示
動態編程

LinQ目的

面向對象技術誕生以來并沒有解決降低訪問和整合信息數據的復雜度的問題。其中兩個最主要訪問的數據源與數據庫和 XML 相關。

使用LINQ的目的是為了提供一個解決對象關系映射問題的方案,同時簡化對象和數據源的交互。LINQ最終發展成為一個通用語言集成查詢的工具包。

LINQ正如它的名字“集成查詢語言”的含義一樣,它提供給程序員一個統一的編程界面。程序員不需要關心他將要操作的將是關系數據庫還是XML,甚至是遠程的對象,它都采用同樣的查詢方式。就如同通過T-SQL操縱數據庫一樣,不管是Oracle,SyBase還是SQL Server,他們的Select語法都是一樣的。

有了LINQ,程序員便可以不再沉泥于不同的數據訪問技術的學習。不管編程語言如何發展,還是數據庫技術的發展,都不再需要程序員進行學習,數據存儲的效率由數據庫廠商進行優化,靈活的數據操作方法由數據訪問中間件廠商提供,程序員只需要編寫業務邏輯。

LINQ包括:
–LINQ to Objects 用于對象的查詢
–LINQ to XML 對XML數據的查詢
–LINQ to ADO.NET 對數據庫的查詢
LINQ to DataSets 數據集
LINQ to Entities ORM對象
LINQ to SQL 簡易ORM框架
命名空間在System.Linq
實現 IEnumerable<T> 或 IQueryable<T> 接口的對象都可使用LINQ操作

LINQ框架圖

委托
委托是一種定義方法簽名的類型。 當實例化委托時,您可以將其實例與任何具有兼容簽名的方法相關聯。 您可以通過委托實例調用方法。
委托用于將方法作為參數傳遞給其他方法。 事件處理程序就是通過委托調用的方法
public delegate void MyF1 ( int a);
public void M1( int a)
{
Console .WriteLine(a);
}
MyF1 _myf1 = M1 ;
myf1(3);
與委托的簽名(由返回類型和參數組成)匹配的任何可訪問類或結構中的任何方法都可以分配給該委托。 方法可以是靜態方法,也可以是實例方法。 這樣就可以通過編程方式來更改方法調用,還可以向現有類中插入新代碼。 只要知道委托的簽名,就可以分配您自己的方法。
匿名方法
我們在使用一個方法的時候, 一般情況下我們會先把方法名、參數、返回值
寫出來也稱做命名方法
int MyMethod(int a){}
匿名方法的意思就是不用給定方法的名稱。允許我們定義委托對象可以接收的代碼
上邊的委托我們可以寫成
MyF1 _f = delegate ( int a)
{
Console .WriteLine(a);
};
_f(1);
例button的點擊事件
通常的寫法是
button1.Click += button1_Click;
void button1_Click( object sender, EventArgs e)
{
MessageBox .Show( "Click!" )
}
用匿名方法可以這樣
button1.Click += delegate ( object obj1, EventArgs e)
{
MessageBox .Show( "Click!" );
};
Lambda 表達式
lambda 取代的匿名方法
Lambda 表達式是一個可用于創建委托或表達式樹類型的匿名函數。 通過使用 lambda 表達式,可以寫入可作為參數或返回為函數調用值的本地函數。 Lambda 表達式對于編寫 LINQ 查詢表達式特別有用。
若要創建 Lambda 表達式,必須在 Lambda 運算符 => 左側指定輸入參數(如果有),然后在另一側輸入表達式或語句塊。 例如,lambda 表達式 x => x * x 指定名為 x 的參數并返回 x 的平方。
我們還是用上邊的delegate例子:
MyF1 _my1 = a =>
{
Console .WriteLine(a);
};
_my1(3);
Button的點擊事件可以寫成這樣
button1.Click += (obj1, obje2) =>
{
MessageBox .Show( "Click!" );
};
Linq的基本語法
所有 LINQ 查詢操作都由以下三個不同的操作組成:
獲取數據源。
創建查詢。
執行查詢。
查詢表達式必須以 from 子句開頭,并且必須以 select 或 group 子句結尾。 在第一個 from 子句和最后一個 select 或 group 子句之間,查詢表達式可以包含一個或多個下列可選子句:where、orderby、join、let 甚至附加的 from 子句。 還可以使用 into 關鍵字使 join 或 group 子句的結果能夠充當同一查詢表達式中附加查詢子句的源。
int [] _scores = new int [] { 97, 92, 81, 60 };
IEnumerable < int > _query =
from score in _scores
where score > 80
select score;
foreach ( int i in _query)
{
Console .WriteLine(i + " " );
}
也可以這么寫
IEnumerable < int > _query = _scores.Where(x => x > 80);
foreach ( int i in _query)
{
Console .WriteLine(i + " " );
}

下圖顯示了完整的查詢操作。在 LINQ 中,查詢的執行與查詢本身截然不同;換句話說,如果只是創建查詢變量,則不會檢索任何數據。

完整的 LINQ 查詢操作
查詢變量本身只是存儲查詢命令。 實際的查詢執行會延遲到在 foreach 語句中循環訪問查詢變量時發生。 此概念稱為“延遲執行”

LINQ基礎概述


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99久久免费费视频在线观看 | 久久天天躁夜夜躁狠狠85麻豆 | 大伊香蕉精品视频在线天堂 | 欧美丰满大乳大屁股毛片 | 黄色自拍网站 | 亚洲尹人香蕉网在线视颅 | 成人国产在线不卡视频 | 欧美一级毛片生活片 | 香蕉人在线香蕉人在线 | 亚洲精品国产成人7777 | 天天看片夜夜爽 | 一本伊大人香蕉久久网手机 | 成人毛片18岁女人毛片免费看 | 久久天堂成人影院 | 国产高h | 久久久久久久国产视频 | 精品久久久久久国产91 | 国产免费一区二区三区在线观看 | 日韩精品免费一区二区三区 | 久久93精品国产91久久综合 | 男人的天堂在线精品视频 | 二性视频 | 99视频精品免费99在线 | 国产一级特黄全黄毛片 | 久草视频免费在线观看 | 高清国产精品入口麻豆 | 97视频在线观看免费播放 | 亚洲欧美一区二区久久香蕉 | 午夜精品久久久久久 | 毛片免费观看日本中文 | 欧美大尺度免费一级特黄 | 久久国产一区二区三区 | 国产美女拍拍拍在线观看 | 亚洲国内 | 国产91成人精品亚洲精品 | 不卡一区 | 日韩 亚洲 中文 图片 小说 | 久久大综合 | 国产精品a在线观看香蕉 | 日韩美女va在线毛片免费知 | a久久 |