2010-11-25 100 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()執行此操作。