常用的LINQ to SQL 用法

一、Where操作

  適用場景:實現過濾,查詢等功能。

  說明:與SQL命令中的Where作用相似,都是起到范圍限定也就是過濾作用的,而判斷條件就是它后面所接的子句。

  Where操作包括3種形式,分別為簡單形式、關系條件形式、First()形式。下面分別用實例舉例下:

?

1.簡單形式:

例如:使用where篩選在倫敦的客戶

var q =

  from c in db.Customers

  where c.City == "London"

  select c;

再如:篩選1994 年或之后雇用的雇員:

var q =

  from e in db.Employees

  where e.HireDate >= new DateTime(1994, 1, 1)

  select e;

2.關系條件形式:

篩選庫存量在訂貨點水平之下但未斷貨的產品:

var q =

  from p in db.Products

  where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued

  select p;

篩選出UnitPrice 大于10 或已停產的產品:

var q =

  from p in db.Products

  where p.UnitPrice > 10m || p.Discontinued

  select p;

下面這個例子是調用兩次where以篩選出UnitPrice大于10且已停產的產品。

var q =

  db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued);

?

3.First()形式:

返回集合中的一個元素,其實質就是在SQL語句中加TOP (1)。

簡單用法:選擇表中的第一個發貨方。

Shipper shipper = db.Shippers.First();

元素:選擇CustomerID 為“BONAP”的單個客戶

Customer cust = db.Customers.First(c =>c.CustomerID == "BONAP");

條件:選擇運費大于 10.00 的訂單:

Order ord = db.Orders.First(o =>o.Freight > 10.00M);

?

二、Select/Distinct

?

說明:和SQL命令中的select作用相似但位置不同,查詢表達式中的select及所接子句是放在表達式最后并把子句中的變量也就是結果返回回來;延遲。

?

Select/Distinct操作包括9種形式,分別為簡單用 法、匿名類型形式、條件形式、指定類型形式、篩選形式、整形類型形式、嵌套類型形式、本地方法調用形式、Distinct形式。

?

1.簡單用法:

?

這個示例返回僅含客戶聯系人姓名的序列。

?

var q =

?

  from c in db.Customers

?

  select c.ContactName;

?

注意:這個語句只是一個聲明或者一個描述,并沒有真正把數據取出來,只有當你需要該數據的時候,它才會執行這個語句,這就是延遲加載(deferred loading)。如果,在聲明的時候就返回的結果集是對象的集合。你可以使用ToList() 或ToArray()方法把查詢結果先進行保存,然后再對這個集合進行查詢。當然延遲加載(deferred loading)可以像拼接SQL語句那樣拼接查詢語法,再執行它。

?

2.匿名類型形式:

?

說明:匿名類型是C#3.0中新特性。其實質是編譯器根據我們自定義自動產生一個匿名的類來幫助我們實現臨時變量的儲存。匿名類型還依賴于另外一個特性:支持根據property來創建對象。比如,var d = new { Name = "s" };編譯器自動產生一個有property叫做Name的匿名類,然后按這 個類型分配內存,并初始化對象。但是var d = new {"s"};是編譯不 通過的。因為,編譯器不知道匿名類中的property的名字。例如stringc = "d";var d = new { c}; 則是可以通過編譯的。編譯器會創建一個叫 做匿名類帶有叫c的property。

?

?

?

例如下例:new {c,ContactName,c.Phone};ContactName和Phone都是在映射文件中定義與表中字 段相對應的property。編譯器讀取數據并創建對象時,會創建一個匿名類,這個 類有兩個屬性,為ContactName和Phone,然后根據數據初始化對象。另外編譯器 還可以重命名property的名字。

?

?

?

var q =

?

  from c in db.Customers

?

  select new {c.ContactName, c.Phone};

?

?

?

上面語句描述:使用 SELECT 和匿名類型返回僅含客戶聯系人姓名和電話號碼的序列

?

?

?

var q =

?

  from e in db.Employees

?

  select new

?

  {

?

    Name = e.FirstName + " " + e.LastName,

?

    Phone = e.HomePhone

?

  };

?

?

?

上面語句描述:使用SELECT和匿名類型返回僅含雇員姓名和電話號碼的序列,并將 FirstName和LastName字段合并為一個字段“Name”,此外在所得的序列中將HomePhone字段重命名為Phone。

?

?

?

var q =

?

  from p in db.Products

?

  select new

?

  {

?

     p.ProductID,

?

    HalfPrice = p.UnitPrice / 2

?

  };

?

?

?

上面語句描述:使用SELECT和匿名類型返回所有產品的ID以及 HalfPrice(設置為產品單價除以2所得的值)的序列。

?

?

?

3.條件形式:

?

?

?

說明:生成SQL語句為:case when condition then else。

?

?

?

var q =

?

  from p in db.Products

?

  select new

?

  {

?

    p.ProductName,

?

    Availability =

?

     p.UnitsInStock - p.UnitsOnOrder < 0 ?

?

    "Out Of Stock" : "In Stock"

?

  };

?

?

?

上面語句描述:使用SELECT和條件語句返回產品名稱和產品供貨狀態的序列。

?

?

?

4.指定類型形式:

?

?

?

說明:該形式返回你自定義類型的對象集。

?

?

?

var q =

?

  from e in db.Employees

?

  select new Name

?

   {

?

    FirstName = e.FirstName,

?

    LastName = e.LastName

?

  };

?

?

?

上面語句描述:使用SELECT和已知類型返回雇員姓名的序列。

?

?

?

5.篩選形式:

?

?

?

說明:結合where使用,起到過濾作用。

?

?

?

var q =

?

  from c in db.Customers

?

   where c.City == "London"

?

  select c.ContactName;

?

?

?

上面語句描述:使用SELECT和WHERE返回僅含倫敦客戶聯系人姓名的序列。

?

?

?

6.shaped形式(整形類型):

?

?

?

說明:其select操作使用了匿名對象,而這個匿名對象中,其屬性也是個匿名對象。

?

?

?

var q =

?

  from c in db.Customers

?

  select new {

?

    c.CustomerID,

?

    CompanyInfo = new {c.CompanyName, c.City, c.Country},

?

    ContactInfo = new {c.ContactName, c.ContactTitle}

?

  };

?

?

?

語句描述:使用 SELECT 和匿名類型返回有關客戶的數據的整形子集。查詢顧客的ID和公司信息(公司名稱,城市,國家)以及聯系信息(聯系人和職位)。

?

?

?

7.嵌套類型形式:

?

?

?

說明:返回的對象集中的每個對象DiscountedProducts屬性中,又包含一個集合。也就是每個對象也是一個集合類。

?

?

?

var q =

?

  from o in db.Orders

?

  select new {

?

     o.OrderID,

?

    DiscountedProducts =

?

      from od in o.OrderDetails

?

      where od.Discount > 0.0

?

      select od,

?

    FreeShippingDiscount = o.Freight

?

  };

?

?

?

語句描述:使用嵌套查詢返回所有訂單及其OrderID 的序列、打折訂單中項目的子序列以及免送貨所省下的金額。

?

?

?

8.本地方法調用形式(LocalMethodCall):

?

?

?

這個例子在查詢中調用本地方法 PhoneNumberConverter將電話號碼轉換為國際格式。

?

?

?

var q = from c in db.Customers

?

     where c.Country == "UK" || c.Country == "USA"

?

     select new

?

     {

?

       c.CustomerID,

?

       c.CompanyName,

?

       Phone = c.Phone,

?

       InternationalPhone =

?

       PhoneNumberConverter(c.Country, c.Phone)

?

     };

?

?

?

PhoneNumberConverter方法如下:

?

?

?

public string PhoneNumberConverter(stringCountry, string Phone)

?

{

?

  Phone = Phone.Replace(" ", "").Replace(")", ")-");

?

  switch (Country)

?

   {

?

    case "USA":

?

      return "1- " + Phone;

?

    case "UK":

?

       return "44-" + Phone;

?

    default:

?

      return Phone;

?

  }

?

}

?

?

?

下面也是使用了這個方法將電話號碼轉換為國際格式并創建XDocument

?

?

?

XDocument doc = new XDocument(

?

  new XElement("Customers", from c in db.Customers

?

       where c.Country == "UK" || c.Country == "USA"

?

       select (new XElement ("Customer",

?

           new XAttribute ("CustomerID", c.CustomerID),

?

           new XAttribute("CompanyName", c.CompanyName),

?

           new XAttribute("InterationalPhone",

?

            PhoneNumberConverter(c.Country, c.Phone))

?

           ))));

?

9.Distinct形式:

?

?

?

說明:篩選字段中不相同的值。用于查詢不重復的結果集。生成SQL語句為:SELECT DISTINCT [City] FROM [Customers]

?

?

?

var q = (

?

  from c in db.Customers

?

  select c.City )

?

  .Distinct();

?

?

?

語句描述:查詢顧客覆蓋的國家。

?

轉載于:https://www.cnblogs.com/czqbk/p/4997754.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286518.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用Python寫一個將Python2代碼轉換成Python3代碼的批處理工具

之前寫過一篇如何在windows操作系統上給.py文件添加一個快速處理的右鍵功能的文章&#xff1a;《一鍵將Python2代碼自動轉化為Python3》&#xff0c;作用就是為了將Python2的文件升級轉換成Python3的文件。之后&#xff0c;有朋友問&#xff0c;如果有很多文件需要轉換&#xf…

WP 手機Lumia 820 鎖屏密碼的POJI研究

Windows Phone lumia 手機鎖屏密碼的POJI研究大家好今天給大家分享一個最新研究案例&#xff0c;近日筆者Nokia Lumia 820&#xff0c;由于客戶密碼失誤太多&#xff0c;導致鎖屏23000余分鐘&#xff0c;&#xff0c;請看&#xff1a;型號Nokia Lumia820條件&#xff1a;Lumia8…

ArcGIS10從入門到精通系列實驗圖文教程(附配套實驗數據持續更新)

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 本教程《ArcGIS從入門到精通系列實驗教程》內容包括&#xff1a;ArcGIS平臺簡介、ArcGIS應用基礎、空間數據的采集與組織、空間數據的轉換與處理、空間數據的可視化表達、GIS空間分析導論、矢量數據的空間分析、柵格數據…

【iVX 初級工程師培訓教程 10篇文拿證】09 聊天室制作

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

為什么Dapr是比SpringCloud和Istio更優雅的微服務框架?

作者&#xff1a;徐磊文章首發地址&#xff1a;https://smartide.cn/zh/blog/2022-0601-dapr/Dapr 是微軟主導的云原生開源項目&#xff0c;2019年10月首次發布&#xff0c;到正式發布 V1.0 版本的不到一年的時間內&#xff0c;github star 數達到了 1.2萬&#xff08;現在已經…

Android之模擬網絡請求返回http 502、400、401、402錯誤碼

1 問題 app 網絡框架協程沒有做網絡異常捕獲處理&#xff0c;想本地測試網絡接口&#xff0c;希望網絡接口返回Http的錯誤碼 比如502、400、401、402 2 解決辦法 1、pc安裝Fiddler Everywhere 2、讓Fiddler Everywhere支持抓http和https的包 3、保持手機和電腦同一個局域網&am…

12c分頁查詢特性FETCH FIRST ROWS,OFFSET ROWS FETCH NEXT ROW LIMIT Clause子句

Database 12c的FETCH FIRST ROWS特性可以簡化老版本中ROW_NUM()或ROWNUM的分頁排序寫法&#xff0c; 大幅節約開發花在分頁查詢語句上的時間。 row-limiting子句用以限制某個查詢返回的行數 可以通過FETCH FIRST/NEXT關鍵字指定返回結果的行數可以通過PERCENT關鍵字指定返回結果…

tomcat結合nginx使用小結

tomcat結合nginx部署 相信很多人都聽過nginx&#xff0c;這個小巧的東西慢慢地在吞食apache和IIS的份額。那究竟它有什么作用呢&#xff1f;可能很多人未必了解。 說到反向代理&#xff0c;可能很多人都聽說&#xff0c;但具體什么是反向代理&#xff0c;很多人估計就不清楚了。…

如何學好GIS,徹底領悟這幾句話就夠了!!!

目 錄前言1. GIS起源于地圖學2. GISer心中要有地圖3. 空間數據是GIS的血液4. 空間分析是GIS的靈魂5. GIS是智慧城市的操作系統前言 地理信息系統 &#xff08;GIS&#xff09;是以可視化和分析地理配準信息為目的&#xff0c;用于描述和表征地球及其他地理現象的一種系統。 地…

【iVX 初級工程師培訓教程 10篇文拿證】07 08 新聞頁制作

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

【WEB API項目實戰干貨系列】- WEB API入門(一)

這篇做為這個系列的第一篇&#xff0c;做基本的介紹&#xff0c;有經驗的人可以直接跳到第二部分創建 ProductController。創建 Web API 項目 在這里我們使用VS2013, .NET 4.5.1創建一個Web API 2的項目選擇項目WEB API模板, 在最下方的MVC主要是默認會自帶微軟的API Helper, 使…

父元素 高度固定,如何使其中的文字垂直居中?

方法一&#xff1a; 設置父元素高度&#xff0c;設置子元素行高垂直居中 <style> *{padding: 0;margin:0;font-size: 12px;} div{float: left;width: 200px;height:200px;margin: 10px;border:1px solid blue; line-height: 200px;} span{display: inline-block;verti…

Android之打開繼承DialogFragment對話框里面EditText獲取光標并且彈出鍵盤把底部布局頂上去

1 需求 打開繼承DialogFragment對話框里面EditText獲取光標并且彈出鍵盤把底部布局頂上去 2 效果爆照如下 打開這個DialogFragment 3 關鍵代碼實現 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)…

驅動介紹

關于驅動驅動&#xff08;也稱連接器&#xff09;是對傳統的數據采集程序的標準化&#xff0c;驅動可以作為你的資產進行管理系統為每個設備創建一個驅動實例通過反射創建驅動實例驅動不可以是靜態的驅動要繼承IDriver接口驅動內需要通過web配置的屬性(支持枚舉等基本類型),上要…

【iVX 初級工程師培訓教程 10篇文拿證】06 數據庫及服務

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

memcached安裝和php擴展memcache安裝

1.準備安裝包: libevent-2.1.8-stable.tar.gz memcached-1.5.0.tar.gz memcache-2.2.7.tgz 2.安裝libevent tar xf /opt/libevent-2.1.8-stable.tar.gz cd libevent-2.1.8-stable mkdir /usr/local/libevent ./configure --prefix/usr/local/libevent make && make …

J2EE開發技術點4:ajax技術

前言 AJAX 是在不重新加載整個頁面的情況下&#xff0c;與服務器交換數據并更新部分網頁的技術。需要知道的是&#xff0c;Ajax技術并不是一項新的技術&#xff0c;而是使用現有技術解決問題的新方法。Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;也叫異步Jav…

【WEB API項目實戰干貨系列】- 接口文檔與在線測試(二)

這一篇我們主要介紹如何做API幫助文檔&#xff0c;給API的調用人員介紹各個 API的功能, 輸入參數&#xff0c;輸出參數, 以及在線測試 API功能(這個也是方便我們自己開發調試) 我們先來看看我們的API最終幫助文檔及在線測試最終達到的效果: 概要圖GET API添加產品API:刪除產品 …

IOS多線程

http://www.jianshu.com/p/0b0d9b1f1f19 首頁專題下載手機應用顯示模式登錄注冊登錄添加關注作者 伯恩的遺產 2015.07.29 00:37* 寫了35249字&#xff0c;被2296人關注&#xff0c;獲得了1668個喜歡關于iOS多線程&#xff0c;你看我就夠了 字數8596 閱讀92152 評論153 喜歡905在…

Android之提示Failed to load WebView provider: No WebView installed

1 問題 Fatal Exception: android.util.AndroidRuntimeException: android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installedat android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:435)at a…