我在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()进行。

10-05 19:42