日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

常用的LINQ to SQL 用法

發(fā)布時(shí)間:2023/12/9 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用的LINQ to SQL 用法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Where操作

  適用場(chǎng)景:實(shí)現(xiàn)過(guò)濾,查詢等功能。

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

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

?

1.簡(jiǎn)單形式:

例如:使用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.關(guān)系條件形式:

篩選庫(kù)存量在訂貨點(diǎn)水平之下但未斷貨的產(chǎn)品:

var q =

  from p in db.Products

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

  select p;

篩選出UnitPrice 大于10 或已停產(chǎn)的產(chǎn)品:

var q =

  from p in db.Products

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

  select p;

下面這個(gè)例子是調(diào)用兩次where以篩選出UnitPrice大于10且已停產(chǎn)的產(chǎn)品。

var q =

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

?

3.First()形式:

返回集合中的一個(gè)元素,其實(shí)質(zhì)就是在SQL語(yǔ)句中加TOP (1)。

簡(jiǎn)單用法:選擇表中的第一個(gè)發(fā)貨方。

Shipper shipper = db.Shippers.First();

元素:選擇CustomerID 為“BONAP”的單個(gè)客戶

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

條件:選擇運(yùn)費(fèi)大于 10.00 的訂單:

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

?

二、Select/Distinct

?

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

?

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

?

1.簡(jiǎn)單用法:

?

這個(gè)示例返回僅含客戶聯(lián)系人姓名的序列。

?

var q =

?

  from c in db.Customers

?

  select c.ContactName;

?

注意:這個(gè)語(yǔ)句只是一個(gè)聲明或者一個(gè)描述,并沒(méi)有真正把數(shù)據(jù)取出來(lái),只有當(dāng)你需要該數(shù)據(jù)的時(shí)候,它才會(huì)執(zhí)行這個(gè)語(yǔ)句,這就是延遲加載(deferred loading)。如果,在聲明的時(shí)候就返回的結(jié)果集是對(duì)象的集合。你可以使用ToList() 或ToArray()方法把查詢結(jié)果先進(jìn)行保存,然后再對(duì)這個(gè)集合進(jìn)行查詢。當(dāng)然延遲加載(deferred loading)可以像拼接SQL語(yǔ)句那樣拼接查詢語(yǔ)法,再執(zhí)行它。

?

2.匿名類型形式:

?

說(shuō)明:匿名類型是C#3.0中新特性。其實(shí)質(zhì)是編譯器根據(jù)我們自定義自動(dòng)產(chǎn)生一個(gè)匿名的類來(lái)幫助我們實(shí)現(xiàn)臨時(shí)變量的儲(chǔ)存。匿名類型還依賴于另外一個(gè)特性:支持根據(jù)property來(lái)創(chuàng)建對(duì)象。比如,var d = new { Name = "s" };編譯器自動(dòng)產(chǎn)生一個(gè)有property叫做Name的匿名類,然后按這 個(gè)類型分配內(nèi)存,并初始化對(duì)象。但是var d = new {"s"};是編譯不 通過(guò)的。因?yàn)?#xff0c;編譯器不知道匿名類中的property的名字。例如stringc = "d";var d = new { c}; 則是可以通過(guò)編譯的。編譯器會(huì)創(chuàng)建一個(gè)叫 做匿名類帶有叫c的property。

?

?

?

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

?

?

?

var q =

?

  from c in db.Customers

?

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

?

?

?

上面語(yǔ)句描述:使用 SELECT 和匿名類型返回僅含客戶聯(lián)系人姓名和電話號(hào)碼的序列

?

?

?

var q =

?

  from e in db.Employees

?

  select new

?

  {

?

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

?

    Phone = e.HomePhone

?

  };

?

?

?

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

?

?

?

var q =

?

  from p in db.Products

?

  select new

?

  {

?

     p.ProductID,

?

    HalfPrice = p.UnitPrice / 2

?

  };

?

?

?

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

?

?

?

3.條件形式:

?

?

?

說(shuō)明:生成SQL語(yǔ)句為: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"

?

  };

?

?

?

上面語(yǔ)句描述:使用SELECT和條件語(yǔ)句返回產(chǎn)品名稱和產(chǎn)品供貨狀態(tài)的序列。

?

?

?

4.指定類型形式:

?

?

?

說(shuō)明:該形式返回你自定義類型的對(duì)象集。

?

?

?

var q =

?

  from e in db.Employees

?

  select new Name

?

   {

?

    FirstName = e.FirstName,

?

    LastName = e.LastName

?

  };

?

?

?

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

?

?

?

5.篩選形式:

?

?

?

說(shuō)明:結(jié)合where使用,起到過(guò)濾作用。

?

?

?

var q =

?

  from c in db.Customers

?

   where c.City == "London"

?

  select c.ContactName;

?

?

?

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

?

?

?

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

?

?

?

說(shuō)明:其select操作使用了匿名對(duì)象,而這個(gè)匿名對(duì)象中,其屬性也是個(gè)匿名對(duì)象。

?

?

?

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}

?

  };

?

?

?

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

?

?

?

7.嵌套類型形式:

?

?

?

說(shuō)明:返回的對(duì)象集中的每個(gè)對(duì)象DiscountedProducts屬性中,又包含一個(gè)集合。也就是每個(gè)對(duì)象也是一個(gè)集合類。

?

?

?

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

?

  };

?

?

?

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

?

?

?

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

?

?

?

這個(gè)例子在查詢中調(diào)用本地方法 PhoneNumberConverter將電話號(hào)碼轉(zhuǎn)換為國(guó)際格式。

?

?

?

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;

?

  }

?

}

?

?

?

下面也是使用了這個(gè)方法將電話號(hào)碼轉(zhuǎn)換為國(guó)際格式并創(chuàng)建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形式:

?

?

?

說(shuō)明:篩選字段中不相同的值。用于查詢不重復(fù)的結(jié)果集。生成SQL語(yǔ)句為:SELECT DISTINCT [City] FROM [Customers]

?

?

?

var q = (

?

  from c in db.Customers

?

  select c.City )

?

  .Distinct();

?

?

?

語(yǔ)句描述:查詢顧客覆蓋的國(guó)家。

?

轉(zhuǎn)載于:https://www.cnblogs.com/czqbk/p/4997754.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的常用的LINQ to SQL 用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。