ObjectQuery <t>或IQueryable <t> </t> </t>

时间:2010-11-25 16:28:44

标签: c# linq .net-4.0 entity-framework-4

我在winforms应用程序中使用ObjectQuery作为几个BindingSource的数据源。 问题是我习惯于像Linq一样查询,所以我使用它们来定义数据源:

View.DsMyDataSource = (from p in ModelContext.GetContext.MyObject 
                       where p.Deleted == false  p) as ObjectQuery<MyObject>;

ModelContext.GetContext()返回我的modelContext实体的单例。

这样做的好方法吗?我担心使用类似LINQ的查询我可能会因为演员而失去一些东西。

有没有其他方法可以使用linq语法获取ObjectQuery类型?

感谢任何提示。

1 个答案:

答案 0 :(得分:4)

实际上ObjectQuery<T> 实现了 IQueryable<T>,所以没有真正的区别。

我建议不要绑定到IQueryable,因为这会给UI带来太大的威力。 IQueryable的意思是将查询的执行推迟到以后的某个时间点(例如BLL,服务层),但是IMO的演示太晚了。

当我说它为时已晚时,我的意思是,当查询到达UI时,不再需要对数据库进行查询。但是,如果UI开始执行.Count().Sum()等操作,则会执行2个查询。处理您的数据上下文非常困难。

我的建议,返回一个具体的集合:例如ICollection<T>,并绑定到那个。

如果您需要执行分页等操作,请通过LINQ .Skip().Take()执行此操作。