C 3 0入門系列(五) 之Where操作

2021-04-13 11:29:13 字數 2962 閱讀 1039

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操作

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.empl...

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...