日期:2014-05-20  浏览次数:20791 次

在vs10中相当 DateSet的数据容器是什么呢
在vs10中相当 DateSet的数据容器是什么呢,

------解决方案--------------------

那你就直接问有什么东西比dataset性能好的不就是了.
------解决方案--------------------
探讨
那你就直接问有什么东西比dataset性能好的不就是了.

------解决方案--------------------
首先你对C#语法没什么概念,看到个IQueryable以为是什么神奇玩意。

首先搞清楚,IQueryable只是一个接口而已。它本身一没有查询数据的能力,二没有存储数据的能力。
------解决方案--------------------
明白你的意思。照你的意思来就是Entity Framework的Entity Data Model(EDM)了。
------解决方案--------------------
Entity Framework的目的就是与数据存储无关的方式去编程,也就是所谓的Persistence Ignorance.

Entity Framework的Entity Data Model就是个Model,这个Model可以和数据库表结构1:1,也可以完全不一样,不止是字段名自定义问题,而是表面上看起来和数据库表结构完全两样,支持继承,Navigation Property等等数据库里没用对应物的一种结构,通过这个结构(Model),帮你生成业务对象(EntityObject),业务集合(ObjectSet<T>)等。当你编程时只针对EDM帮你生成的对象,(相对的)无需关心数据存取方面。让你从建立数据库建接,再把读取的record转换成业务对象,填充进集合的这种方式里解脱出来……


------解决方案--------------------
至于理解IQueryable<T>,那必须理解表达式树(Expression Tree)是什么。IQueryable<T>接口里的Expression字段才是它这个接口最重要的核心。

所以从楼主的感觉上来讲,IQueryable<Entity>不能算DataSet的对应物,应该说是Entity Framework的ObjectSet<T>才是最接近的。但要知道ObjectSet<T>也实现了IQueryable<T>的,也就是10楼caozhy说的它没有存储数据的能力。
------解决方案--------------------
不应该换成另一种类型!也没有什么可换的类型。

我认为这里最最关键的是赶紧去找表达式树(Expressoin Tree)相关的资料补一下。这个‘简单的’知识点没过关,一切都扯淡!后面什么都没用。
------解决方案--------------------
from type in context.TB_PM_PRODUCT_TYPE where type.TYPE_FID == a select type;

你认为它是在查询数据库吗?可以这么说,也可以说不是这样子的。它是在查询Model,这个from …… in Context.……句子本身的表达意思是查询Model,而不是数据库。是支持EF的.net Provider在帮你把它转换成SQL语句,取得数据后再封装进Entity Object集合再返回给你(而这个过程你“看”不到)。在EF的世界里,查询的结果默认就是EntityObject派生的对象的集合:ObjectSet<T>.