2011-02-23 66 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