LINQ to Entities 和LINQ to Objects 的區別


本文資料來源:http://www.codeproject.com/Articles/246861/LINQ-to-Entities-Basic-Concepts-and-Features

LINQ to Entities needs an Object Context object. The ObjectContext object is the bridge between LINQ and the database (we will explain more about ObjectContext later). LINQ to Objects don't need any intermediate LINQ provider or API.
LINQ to Entities returns data of type IQueryable<T> whereas LINQ to Objects returns data of type IEnumerable<T>.
LINQ to Entities queries are translated to SQL by way of Expression Trees, which allow them to be evaluated as a single unit, and translated to appropriate and optimal SQL Statements. LINQ to Objects queries do not need to be translated.
LINQ to Entities queries are translated to SQL calls and executed on the specified database while LINQ to Objects queries are executed in the local machine memory.

 

1)linq to entity 需要objectcontext對象,而Linq to object不需要。
2)linq to entity 返回的是IEnumerable<T>類型,而 linq to object返回的是IQuerable<T>類型。
3linq to entity 通過表達式樹的方式被翻譯為SQL,表達式樹允許被看作一個簡單單元,閉然后並翻譯成為恰當且合適的SQl語句。而linq to object 不需要被翻譯。
4)linq to entity 被轉化為SQL語句,因此在特定的數據庫中執行,而linq to object在本地的機器內存中執行。

還有一點,linq to sql“已死”,微軟現在主要將EF作為推薦的ORM。實際上,LINQ to SQL 被認為是C#團隊證明C#這門新語言成功的中間產品。

 

該文中的其他一些關鍵點:

linq to sql 是.net 3.5的一部分,提供了運行時的管理關系型數據基礎。
需要注意的一點是,在處理LINQ To Entities時是LINQ的延遲執行。
標准的查詢運算符在何時執行,取決於運算是返回一個單值或者序列值。某些返回單值(比如Average和Sum)立即就執行了。而方法序列值則延遲了查詢的執行,並且返回了一個可枚舉(enumerable )的對象。
這些方法不消耗對象數據直到查詢對象被枚舉。這就是延遲執行。
操作IEnumerable<T>類型的集合時,參數被立刻傳遞給方法,查詢結果被立刻返回;
而在IQuerable<T>類型集合的擴展方法沒有實施任何查詢行為,但只是創建了代表查詢的表達式樹。查詢進程被IQuerable<T>類型的源數據處理。

Linq to Entity 外鍵的處理被翻譯成join語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM