2011-02-23 79 views
2

我有一個後臺工作人員執行從數據庫加載數據到臨時結構。OrderBy,GetNewBindingList和Linq to SQL

Data d = new Data(); 
d.listGroup = context.Groups.GetNewBindingList(); 
d.tbUser = context.Users.OrderBy(x => x.Name);   
d.listPriceLevel = context.PriceLevels.GetNewBindingList(); 
e.Result = d; 

問題是第三行(d.tbUser = ...)正在被延遲加載。 當然,我可以這樣做:

context.Users.OrderBy(x => x.Name).ToList(); 

但話又說回來,這是不是一個可綁定列表,它所做的任何更改將不會傳播回數據庫。

所以,我認爲我需要這樣的東西:

d.tbUser = context.Users.OrderBy(x => x.Name).GetNewBindingList(); 

但是,這並不工作。 目標是:檢索一個用戶列表,按其名稱排序爲可綁定列表。 任何想法?

謝謝你的時間!

回答

3

添加OrderBy(與任何其他查詢函數一樣)會將您的查詢轉換爲IQueryable<TEntity>。幸運的是,LINQ-to-SQL的內部查詢類型(DataQuery<TEntity>)通過其IListSource的實現提供了BindingList<TEntity>

要獲得BindingList對於給定的查詢,你可以這樣做:

var bindingList = ((IListSource)query).GetList(); 

你的情況:

d.tbUser = ((IListSource)context.Users.OrderBy(x => x.Name)).GetList(); 

雖然GetList返回類型是IList,它實際上,實際BindingList<User>

+0

謝謝。像魅力一樣工作。 – 2011-02-23 14:42:06