我在Winforms应用程序中将ObjectQuery用作几个BindingSources的数据源。
问题是我习惯于使用Linq进行查询,因此我使用它们来定义数据源:
View.DsMyDataSource = (from p in ModelContext.GetContext.MyObject
where p.Deleted == false p) as ObjectQuery<MyObject>;
ModelContext.GetContext()
返回我的modelContext实体的单例。是这样做的好方法吗?恐怕由于使用LINQ之类的查询,我可能会因为强制转换而失去某些东西。
我还有其他方法可以使用linq语法获取ObjectQuery类型吗?
感谢您的任何提示。
最佳答案
实际上,ObjectQuery<T>
实现了IQueryable<T>
,所以没有真正的区别。
我建议不要绑定到IQueryable,因为这会给UI赋予过多功能。 IQueryable的目的是将查询的执行推迟到以后的某个时间点(例如BLL,服务层),但是表示IMO为时已晚。
当我说为时已晚时,我的意思是,当查询到达UI时,不应再对数据库进行查询。但是,如果UI开始执行.Count()
或.Sum()
之类的操作,则将执行2个查询。使处置数据上下文变得非常困难。
我的建议是,返回一个具体的集合:例如ICollection<T>
,并绑定到该集合。
如果您需要执行分页之类的操作,请通过LINQ .Skip()
和.Take()
进行。