我在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类型?
感谢任何提示。
答案 0 :(得分:4)
实际上ObjectQuery<T>
实现了 IQueryable<T>
,所以没有真正的区别。
我建议不要绑定到IQueryable,因为这会给UI带来太大的威力。 IQueryable的意思是将查询的执行推迟到以后的某个时间点(例如BLL,服务层),但是IMO的演示太晚了。
当我说它为时已晚时,我的意思是,当查询到达UI时,不再需要对数据库进行查询。但是,如果UI开始执行.Count()
或.Sum()
等操作,则会执行2个查询。处理您的数据上下文非常困难。
我的建议,返回一个具体的集合:例如ICollection<T>
,并绑定到那个。
如果您需要执行分页等操作,请通过LINQ .Skip()
和.Take()
执行此操作。