c#3.0入門系列(五)-之where操作
select操作
最簡單的 1
, var q
=from c
indb.customers
select c.contactname;
匿名類的 1
, var q
=from c
indb.customers
select
new;
2, var q
=from e
indb.employees
select
new;
3, var q
=from p
indb.products
select
new;
條件的var q
=from p
indb.products
select
new;
這種條件的會被翻譯成sql中{case when condition then else}的。
name type形式的:
var q
=from e
indb.employees
select
newname ;
只所以是name type的,是因為name類是已經定義好的,也就是說,你可以用這種方式,返回你需要型別的物件集.
shaped形式的:
var q
=from c
indb.customers
select
new,
contactinfo
=new
}; 該形式,其select操作使用了匿名物件,而這個匿名物件中,其屬性也是個匿名物件。
nested形式的:
var q
=from o
indb.orders
select
new;
其返回的物件集中的每個物件discountedproducts屬性中,又包含乙個小的集合。也就是每個物件也是乙個集合類。
distinct形式的:
var q =(
from c
indb.customers
select c.city )
.distinct();
該形式,篩選該字段中不相同的值。會被翻譯為
select distinct city from customers
where操作:
最簡單的
1, var q
=from c
indb.customers
where c.city =="
london
"select c;
2, var q
=from e
indb.employees
where e.hiredate
>=
newdatetime(
1994, 1
, 1)select e;
或與關係的where條件
1, var q
=from p
indb.products
where p.unitsinstock
<=
p.reorderlevel &&!
p.discontinued
select p;
2, var q
=from p
indb.products
where p.unitprice
>
10m
||p.discontinued
select p;
3, var q
=db.products.where(p
=>
p.unitprice
>
10m).where(p
=>
p.discontinued);
在上例中,1和2語句先被翻譯成類似3語句的形式,再被翻譯成sql語句,送回資料伺服器。他們基本上一樣的。
欠套在first操作中的where條件:
first操作,其實質就是在sql語句前,加了乙個top 1. 1
, customer cust
=db.customers.first(c
=>
c.customerid =="
bonap");
2order ord
=db.orders.first(o
=>
o.freight
>
10.00m
); 第乙個例子,是篩選customerid為"bonap"的客戶,第二個篩選訂單運費大於10的訂單。first操作必須用這種級連的形式。比如
shipper shipper
=db.shippers.first();
也可以把linq的expression和級連的形式混合使用,比如第乙個例子,加入first操作,
var q
=(from c
indb.customers
where c.city =="
london
"select c).first();
如果加入first操作,其返回是乙個具體的物件,而不是乙個集合。如果first操作沒有條件,它只是簡單的在sql語句中新增top 1,如果有條件,它在翻譯時,就會加入條件語句。
C 3 0入門系列(五) 之Where操作
select操作 最簡單的 var q from c indb.customers select c.contactname 匿名類的 var q from c indb.customers select new var q from e indb.employees select new var ...
C 3 0 入門系列(一)
談到dlinq,就不得不先說linq。讓我們先看看什麼是linq。linq是 language integrated query的縮寫。那麼事實上dlinq就是 database language integrated query 的縮寫。linq和dlinq最大的區別就在與linq是對記憶體進行操...
C 3 0入門系列(二)
c 3.0入門系列 二 在第一篇中,我已經和大家簡單介紹了linq。也和大家提起linq是c 3.0裡的乙個特性。不過,你去裝linq priview時,你會發現,它提供了許多vb的linq 從現在的情況看,linq會被移植到.net framework下。在本篇中,筆者將開始更加詳細的介紹dlin...