子查詢
描述:查詢訂單數超過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 ...