linq第1章1次入門ienumerable ch查詢數(shù)據(jù)源_第1頁
linq第1章1次入門ienumerable ch查詢數(shù)據(jù)源_第2頁
linq第1章1次入門ienumerable ch查詢數(shù)據(jù)源_第3頁
linq第1章1次入門ienumerable ch查詢數(shù)據(jù)源_第4頁
linq第1章1次入門ienumerable ch查詢數(shù)據(jù)源_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Linq編程查詢數(shù)據(jù)源上章回顧EF的簡介EF支持的開發(fā)模型模型的創(chuàng)建模型的構(gòu)成本章內(nèi)容Linq

ToEF單個(gè)實(shí)體的查詢關(guān)聯(lián)實(shí)體的查詢延遲加載、勤加載、顯式加載直接利用Sql語句進(jìn)行查詢Linq

To

EFDbContext管理對數(shù)據(jù)庫的連接:當(dāng)進(jìn)行增刪改查操作的時(shí)候,自動打開連接,當(dāng)操作完成的時(shí)候又自動關(guān)閉連接提供了對實(shí)體操作的一個(gè)起始點(diǎn),比如當(dāng)訪問DbSet類型的屬性,可以對此實(shí)體進(jìn)行相關(guān)的增刪改查操作。自動管理事務(wù)Linq

To

EFLinq表達(dá)式最短的查詢操作var

allbooks=

db.Books;foreach

(Book

b

in

allbooks){Console.WriteLine(b.Name);}Linq

To

EFLinq表達(dá)式var

query

=

from

b

in

db.Bookswhere

b.Price

>

20orderby

b.Price

descendingselect

b;Linq操作符形式var

result

=

db.Books.Where(b

=>

b.Price

>

20).OrderByDescending(b

=>

b.Price);Linq

To

EFIQueryable<T>接口–

運(yùn)行時(shí)會把表達(dá)式轉(zhuǎn)換為SQL語句Queryable類是一個(gè)靜態(tài)類,主要是IQueryable<T>的擴(kuò)展方法與Enumerable中的許多方法同名但運(yùn)行機(jī)制是不一樣的。Linq

To

EF小結(jié)一切以上下文對象的DbSet類型的屬性開始可以有Linq表達(dá)式與方法調(diào)用兩種形式許多的操作符來源于Queryable類運(yùn)行時(shí)轉(zhuǎn)換為SQL語句也有延遲執(zhí)行的機(jī)制Linq

To

Objects的許多操作模式,仍然適用單個(gè)實(shí)體的查詢Load是一個(gè)擴(kuò)展方法需要導(dǎo)入System.Data.Entity命名空間在DbExtensions類中using

(var

db

=

new

EFQueryEntities()){db.Books.Load();}單個(gè)實(shí)體的查詢Local屬性是DbSet的一個(gè)屬性,并且有以下幾個(gè)特點(diǎn)。不會導(dǎo)致DbContext去查詢數(shù)據(jù)庫只查詢目前被DbContext所管理的對象,并且不包括已標(biāo)記為刪除狀態(tài)的對象db.Books.Load();var

result

=

db.Books.Local;foreach

(var

item

in

result){Console.WriteLine(item.Name);}}單個(gè)實(shí)體的查詢EF框架產(chǎn)生的SQL語句的查看單個(gè)實(shí)體的查詢In查詢using

(var

db

=

new

EFQueryEntities()){int[]

conditions

=

new

int[]{

1,2,3};var

query

=

from

b

in

db.Books

where

conditions.Contains(b.ID)select

b;foreach(varitem

in

query){Console.WriteLine(item.Name);}}var

query

=

from

b

in

db.Books

where

conditions.Any(id=>id==b.ID)

select

b;不推薦單個(gè)實(shí)體的查詢依據(jù)主鍵來查詢using

(var

db

=

new

EFQueryEntities()){var

Book

=

db.Books.Find(1);Console.WriteLine(Book.Name);}var

SomeEntity=db.Entities.Find(1,”abc”);//聯(lián)合主鍵的情況Find的特點(diǎn)如果在上下文中能找到實(shí)體,那么不會去查數(shù)據(jù)庫Find方法進(jìn)行查找的時(shí)候也會包含添加(Added)狀態(tài)的實(shí)體。關(guān)于這個(gè)狀態(tài)在后續(xù)的章節(jié)中會有介紹單個(gè)實(shí)體的查詢小結(jié)Load與LocalInFindSql

Server

Profile的使用關(guān)聯(lián)實(shí)體查詢關(guān)聯(lián)實(shí)體查詢static

Book

GetBookByID(int

id){using

(var

db

=

new

EFQueryEntities()){returndb.Books.First();}}staticvoid

Main(string[]

args){Book

result=GetBookByID(1);Console.WriteLine("書籍的名字為:{0},類型為:{1}",result.Name,result.BookType.TypeName);Console.Read();}關(guān)聯(lián)實(shí)體查詢關(guān)聯(lián)實(shí)體查詢延遲加載(Lazy

Load):默認(rèn)行為勤加載(Eagerly

Load)顯式加載(Explicit

Load)關(guān)聯(lián)實(shí)體查詢延遲加載(Lazy

Load)using

(var

db

=

new

EFQueryEntities()){Book

result

=

db.Books.First();Console.WriteLine("書籍的名字為:{0},類型為:{1}",result.Name,result.BookType.TypeName);}思考:延遲加載的優(yōu)缺點(diǎn)是什么?db.Configuration.LazyLoadingEnabled=false;//關(guān)閉延遲加載的行為關(guān)聯(lián)實(shí)體查詢勤加載(Eagerly

Load)–

主要是靠Include來完成using

(var

db

=

new

EFQueryEntities()){var

query

=

from

b

in

db.Books.Include(b

=>

b.BookType)select

b;foreach(varitem

in

query){Console.WriteLine("書籍的名字為:{0},類型為:{1}",item.Name,item.BookType==null?"此書還沒有分類

":item.BookType.TypeName);}}關(guān)聯(lián)實(shí)體查詢顯式加載(Explicit

Load)–

主要是靠Reference與Collection方法結(jié)合Load方法來完成using

(var

db

=

new

EFQueryEntities()){db.Configuration.LazyLoadingEnabled

=

false;var

result=db.Books.First();db.Entry(result).Reference(b=>b.BookType).Load();Console.WriteLine("書籍的名字為:{0},類型為:{1}",result.Name,result.BookType.TypeName);}關(guān)聯(lián)實(shí)體查詢延遲加載是默認(rèn)的行為可以通過設(shè)置LazyLoadinEnable為false關(guān)掉此默認(rèn)行為勤加載主要依靠Include方法來完成顯示加載主要是靠Reference與Collection與Load的結(jié)合使用利用SQL查詢直接利用SQL進(jìn)行查詢,主要有兩種形式利用DbSet對象的SqlQuery利用Database對象的SqlQuery方法DbSet的SqlQuery的特點(diǎn)查詢的數(shù)據(jù)會自動轉(zhuǎn)換為實(shí)體書寫的SQL語句必須保證只返回當(dāng)前實(shí)體所需的數(shù)據(jù)。usi–ng查(va詢r(jià)

d出b=來n的ew數(shù)EF據(jù)Qu會er被yEn上tit下ies文())對象管理{通過var參re數(shù)su的lt=形db式.B解oo決ks.S了qlSQqule注ry入("s式ele漏ct

洞*

f的rom問b題oo。k"); foreach

(varb

in

result){Console.WriteLine(b.Name);}}利用SQL查詢int

total

=

db.Database.SqlQuery<int>("select

count(*)

from}Database的SqlQuery的特點(diǎn)–

查詢出來的任何結(jié)果都不會被上下文對象所管理public

class

BookPrice{using

(vpaurbdlibc

d=enceimwaElFTQopuPeriycEen{tigtieets;(s))et;

}{public

decimal

LowestPrice

{

get;

set;

}}boouksi"n).gFi(rvsatr()d;

b

=

new

EFQueryEntities())C{onsole.WriteLine(total);string

tsql=

"select

max(price)

as

TopPrice,min(price)

as

LowestPricefrombook";BookPrice

bookPrice

=

db.Database.SqlQuery<BookPrice>(tsql).First();Console.WriteLine("書籍的最高價(jià)格是{0},\t最低價(jià)格是{1}",bookPrice.TopPrice,bookPrice.LowestPrice);}本章小結(jié)Linq

To

EF單個(gè)實(shí)體的查詢關(guān)聯(lián)實(shí)體的查詢延遲加載、勤加載、顯式加載直

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論