LINQ 查詢彙總

2021-05-26 06:13:20 字數 3385 閱讀 3133

子查詢

描述:查詢訂單數超過5的顧客資訊

查詢句法:

var子查詢

= from c in ctx.customers

where

(from o in ctx.orders group o by o.customerid into o whereo.count() > 5 select o.key).contains(c.customerid)

select c;

in 操作

描述:查詢指定城市中的客戶

查詢句法:

var in操作

= from c in ctx.customers

where new string .contains(c.city)

select c;

join

描述:內連線,沒有分類的產品查詢不到

查詢句法:

varinnerjoin = from p in ctx.products

join c in ctx.categories

on p.categoryid equals c.categoryid

select p.productname;

描述:外連線,沒有分類的產品也能查詢到

查詢句法:

varleftjoin = from p in ctx.products

join c in ctx.categories

on p.categoryid equals c.categoryid

into pro

from x in pro.defaultifempty()

select p.productname;

exists/in/any/all/contains操作符

適用場景:用於判斷集合中元素,進一步縮小範圍。

any說明:用於判斷集合中是否有元素滿足某一條件;不延遲。(若條件為空,則集合只要不為空就返回true,否則為false)。有2種形式,分別為簡單形式和帶條件形式。

1.簡單形式:

僅返回沒有訂單的客戶:

var q =

from c in db.customers

where !c.orders.any()

select c;生成sql語句為:

select [t0].[customerid], [t0].[companyname], [t0].[contactname],

[t0].[contacttitle], [t0].[address], [t0].[city], [t0].[region],

[t0].[postalcode], [t0].[country], [t0].[phone], [t0].[fax]

from [dbo].[customers] as [t0]

where not (exists(

select null as [empty] from [dbo].[orders] as [t1]

where [t1].[customerid] = [t0].[customerid]

))2.帶條件形式:

僅返回至少有一種產品斷貨的類別:

var q =

from c in db.categories

where c.products.any(p => p.discontinued)

select c;生成sql語句為:

select [t0].[categoryid], [t0].[categoryname], [t0].[description],

[t0].[picture] from [dbo].[categories] as [t0]

where exists(

select null as [empty] from [dbo].[products] as [t1]

where ([t1].[discontinued] = 1) and 

([t1].[categoryid] = [t0].[categoryid])

)all

說明:用於判斷集合中所有元素是否都滿足某一條件;不延遲

1.帶條件形式

var q =

from c in db.customers

where c.orders.all(o => o.shipcity == c.city)

select c;語句描述:這個例子返回所有訂單都運往其所在城市的客戶或未下訂單的客戶。

contains

說明:用於判斷集合中是否包含有某一元素;不延遲。它是對兩個序列進行連線操作的。

string customerid_set =

new string ;

var q = (

from o in db.orders

where customerid_set.contains(o.customerid)

select o).tolist();語句描述:查詢"arout", "bolid" 和 "fissa" 這三個客戶的訂單。先定義了乙個陣列,在linq to sql中使用contains,陣列中包含了所有的customerid,即返回結果中,所有的customerid都在這個集合內。也就是in。 你也可以把陣列的定義放在linq to sql語句裡。比如:

var q = (

from o in db.orders

where (

new string )

.contains(o.customerid)

select o).tolist();not contains則取反:

var q = (

from o in db.orders

where !(

new string )

.contains(o.customerid)

select o).tolist();1.包含乙個物件:

var order = (from o in db.orders

where o.orderid == 10248

select o).first();

var q = db.customers.where(p => p.orders.contains(order)).tolist();

foreach (var cust in q)

}語句描述:這個例子使用contain查詢哪個客戶包含orderid為10248的訂單。

2.包含多個值:

string cities = 

new string ;

var q = db.customers.where(p=>cities.contains(p.city)).tolist();語句描述:這個例子使用contains查詢其所在城市為西雅圖、倫敦、巴黎或溫哥華的客戶。

Linq語句彙總

常用select操作舉例 取得單個記錄 id為3的分類 datacontext.categories.single c c.id 3 取得全部記錄 全部分類 datacontext.categories 得部分記錄 所屬分類id為3的公告,按id降序排列 return from b in datac...

LINQ 之 基本 LINQ 查詢操作

在 linq 查詢中,第一步是指定資料來源。像在大多數程式語言中一樣,必須先宣告變數,才能使用它。在 linq 查詢中,最先使用from子句的目的是引入資料來源和範圍變數。queryallcustomers 是 ienumerable型別 資料來源 customers 和範圍變數 cust var ...

Linq 基礎查詢

linq查詢語句編寫工具可以用linqpad,挺好用的 一下是我自己學習linq to sql的查詢語句 基本查詢 from c in workflows select c 帶條件查詢 from c in workflows where c.pid 1 select c 查詢顯示不同的列 from ...