Linq的理論知識,Linq理論知識
概述
前面的部落格中寫到過關於Linq的一些知識,但是,沒有詳細的說Linq,本篇部落格將會說一下Linq。
什麼是Linq
Linq是一個概念,它實現了資料查詢使用同一方式,即,它使我們程式員通過使用它,來實現用同一方式操作不同的資料來源(資料庫,集合,XML檔案)。
Linq的分類
從使用的角度出發,Linq包括:Linq to Objects(對象的查詢)、Linq to XML(XML的查詢)和Linq to ADO.net(資料庫的查詢),而Linq to ADO.net中又分為Linq to SQL、Linq to DataSet和Linq to Entities,對於Linq to SQL這塊內容,就是我們經常說的ORMapping思想的具體實現。ORMapping思想就是使我們程式完全實現物件導向,使我們的不用關聯式資料庫,只需要關注商務邏輯就行。
Linq的查詢方式
Linq的查詢方式有兩種:查詢方法和查詢語句。
查詢方法就是在原有類上的擴充方法,當然,這些方法的參數可以是委託,即我們使用的Lambda運算式,這種方式寫出來的代碼不容易理解,但是,功能確實非常的強大。
查詢語句就是我們使用的類似於SQL語句的語句,這種方式寫出來的代碼容易理解,但是,功能不是很強大。
很多情況下,我們都是將這兩種方式結合的使用。
Linq to SQL的使用
Linq to SQL是Linq中非常重要的實現,而Linq to SQL中的一個核心類就是DataContext,我們不管使用手動自己建立還是通過工具建立Linq to SQL,其實都是在DataContext類的基礎上進行的。
手動建立時,需要我們建立帶有特性的實體類 ,而通過工具建立的,我們不需要通過自己編寫手動的編寫相應的實體類,工具會自動給我們產生。
總結
Linq的一個重要功能就是ORMapping思想的具體實現,ORMapping的思想就是實現編程的真正物件導向,使我們不用關心資料庫,只需要關係實體類或實體集合類就行。
總結linq與sql文法比較
linq是物件導向的sql。也就是說,sql是向關係型資料庫的查詢,而linq實際上是對記憶體裡的資料的查詢。
雖然linq原來是物件查詢,但經過ms的努力,可以通過運算式分析與實體到關係的映射(linq to sql),把linq轉換為sql語句或是對xml的查詢(linq to xml)。
因此,這種技術就成了對象到資料庫記錄的一個方便的映射、轉化與操作的工具,你再也不必去去根據不同的情況用字串拼接的辦法產生sql,而是專心於物件模型的處理即可,你對於對象的修改最終都會被轉換為對應的update, insert, delete等sql語句,在你submit時全部提交到資料庫中。
綜爾言之,linq to sql是一個資料庫到對象結構的一個中介層, 他把對關係資料的管理轉變為對象的操作,屏蔽了麻煩的sql,而且,還可以得到vs強大的智能感知功能的協助。
LINQ,Language-integrated Query (LINQ)(Language INtegrated Query)是一組用於c#和Visual Basic語言的擴充。它允許編寫C#或者Visual Basic代碼以查詢資料庫相同的方式操作記憶體資料。
基本概念
從技術角度而言,LINQ定義了大約40個查詢操作符,如select、from、in、where以及orderby(C#)中。試用這些操作可以編寫查詢語句。不過,這些查詢還可以基於很多類型的資料,每個資料類型都需要一個單獨的LINQ類型。 經過了最近 20 年,物件導向編程技術( object-oriented (OO) programming technologies )在工業領域的應用已經進入了一個穩定的發展階段。程式員現在都已經認同像 類(classes)、對象(objects)、方法(methods)這樣的語言特性。考察現在和下一代的技術,一個新的編程技術的重大挑戰開始呈現出來,即物件導向技術誕生以來並沒有解決降低訪問和整合資訊資料( accessing and integrating information )的複雜度的問題。其中兩個最主要訪問的資料來源與資料庫( database )和 XML 相關。 LINQ 提供了一條更常規的途徑即給 .Net Framework 添加一些可以應用於所有資訊源( all sources of information )的具有多種用途( general-purpose )的文法查詢特性( query facilities ),這是比向開發語言和運行時( runtime )添加一些關係資料( relational )特性或者類似 XML 屬性( XML-specific )更好的方式。這些文法特性就叫做 .NET Language Integrated Query (LINQ) 。 包含 DLinq 和 XLinq
基礎知識
1. LINQ的讀法:(1)lin k (2)lin q 2. LINQ的關鍵詞:from, select, in, where, group by, order by … 3. LINQ的注意點:必須以select或者是group by 結束。 4. LINQ的語義: from 臨時變數 in 集合對象或資料庫物件 where 條件運算式 [order by條件] select 臨時變數中被查詢的值 [group by 條件] LINQ的查詢傳回值的類型是臨時變數的類型,可能是一個對象也可能是一個集合。並且LINQ的查詢運算式是在最近一次建立對......餘下全文>>
LINQ排序的C#代碼及原理
你這個問題不夠具體啊,先給你看一個簡單例子:
例5-24 查詢人名先排序再分組,可以用姓作為分組關鍵字。
string[] Name = {"張明","劉新","王宏","劉洋","張媛","張寶","王金貴","劉東","王凱","劉芳"};
var sortedGroups = from name in Name
orderby name
group name by name[0] into newGroup
select newGroup;
foreach (var nameGroup in sortedGroups)
{
Console.WriteLine(nameGroup.Key);
foreach (var name in nameGroup)
Console.WriteLine(" "+name);
}
輸出:
劉
劉東 劉芳 劉新 劉洋
王
王宏 王金貴 王凱
張
張寶 張明 張媛
------------------
th79d:排序關鍵字是orderby,預設情況是升序(ascending),descending是降序。
除了查詢語句orderby排序外,也可用查詢語句產生DataView,用DataView的sort屬性排序
------------------
注意,DataView調用字串屬性排序後,將清除從查詢繼承的排序資訊。下面的查詢語句篩選出LastName為‘S’打頭的行。DataView使用基於字串的Sort屬性進行排序,LastName是降序,FirstName是升序。
DataTable persons = ds.Tables["Person"];
EnumerableRowCollection<DataRow> query = from person in persons.AsEnumerable()
where person.Field<string>("LastName").StartsWith("S")
select person;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
view.Sort = "LastName desc, FirstName asc";
dataGridView1.DataSource = bindingSource1;
dataGridView1.AutoResizeColumns(
DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
}
catch (SqlException)
{
/*catch語句的代碼同例17-15*/
}
運行結果17-3所示。
...餘下全文>>