2010-11-25 98 views
2

我使用ObjectQuery作为我的winforms应用程序中的一对BindingSource的数据源。 问题是,即时通讯使用到LINQ查询一样,所以我使用它们定义数据源:ObjectQuery <T>或IQueryable <T>

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

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

这样做的好方法吗?我害怕使用类似LINQ的查询,因为投射,我可能会失去一些东西。

是否有任何其他方式可以使用linq语法获得ObjectQuery类型?

感谢您的任何提示。

+1

如果人们没有正确回答我的问题,我为什么要说谎呢? – gruber 2010-11-26 09:20:17

回答

4

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

我会建议不要绑定到IQueryable,因为这会给UI带来太多的权力。 IQueryable的意义在于将查询的执行推迟到稍后的时间点(例如BLL,服务层),但是演示文稿IMO太晚了。

当我说这太晚了,我的意思是,当查询到达用户界面时,不应再对数据库进行任何查询。但是,如果UI开始执行诸如.Count().Sum()的操作,则会执行2个查询。使处理数据上下文非常困难。

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

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