資料庫中過濾資料與在記憶體中過濾資料(延遲載入)

2021-09-20 01:29:19 字數 1450 閱讀 4868

var temp = from u in dbcontexttable

where u.id>4

select u;

規範的寫法其實是:

iqueryabletemp=from u in dbcontexttable

where u.id>4

sele ct u;

或者iqueryable temp=from u in dbcontexttable

where u.id>4

sele ct u;

(因為iqueryable繼承iqueryable,所以可以直接用其基型別)

上面的查詢語句初始化了iqueryable介面裡面的三個引數

1.linq表示式轉成expression型別

2.給type elementtype賦值,也就是model的型別

3.給iqueryable provider賦值,ef provider

當用到iqueryable介面的集合的資料的時候,provider(這裡是efprovider)解析expresion表示式獲取相應的資料。再進行foreach遍歷。

linq to xml則是xml provider

linq to ***則是*** provider

在資料庫內進行過濾:where表示式會生成到查詢語句中,也就是說linq to ef查詢是在資料庫內進行過濾的。可以用資料庫監測工具檢視ef自動生成的。

sql語句。

例如:select

[extent1].[id] as [id],

[extent1].[username] as [username],

[extent1].[pwd] as [pwd]

from [dbo].[userset] as [extent1]

where [extent1].[id] > 200

在記憶體裡面過濾:把資料庫裡面的資料查詢出來到記憶體再過濾,如果資料過多,記憶體會boom。

什麼情況下使用記憶體過濾:

list集合(之前學過的經典集合,例如:array,dictionary。。。)和

iqueryable介面的不同點。

linq to object

立即將資料庫表的資料載入到list中來

var demolist=from u in dbcontext.tablename.tolist()

where u.id>4

select u;

例如:select

[extent1].[id] as [id],

[extent1].[username] as [username],

[extent1].[pwd] as [pwd]

from [dbo].[userset] as [extent1]

是沒有where過濾語句的

還可借助vs的除錯工具設定斷點看看

區別:model first

資料庫中資料進行過濾

最近發現自己的抓取資料中存在一些無用的資訊,於是決定將其清除掉 開始看到一些提示是用ltrim這個函式,一直看到都是select的,害的人以為只能用select才能進行操作,呃.這個也是我知識上面的缺陷,於是想到了建立新錶,語句如下,可是個人感覺有些麻煩,代價也有點大,呵呵 select id,lt...

資料庫表存在記憶體中

資料庫有一種機制 一些程式啟動就需要查詢的表,和一些被頻繁訪問的表。比如 m ope d m product d m eqid d 等可以考慮將這些資料量不大但經常使用的的表快取到記憶體當中。做法有兩種 1 把這些基礎資料存在redis裡面。每次用的時候從redis查,效率很高。但是有乙個缺點,up...

MySQL資料庫 過濾資料

資料庫一般包含大量的資料,但是我們大部分情況下並不需要檢索所有的資料,只要檢索部分資料就行了。1.使用where 子句 在select子句中,資料根據where子句中指定的搜尋條件進行過濾。where子句在表名 from子句 之後給出,如下所示 select users.user name,user...