OrderBy, GetNewBindingList и Linq to SQL - PullRequest
       23

OrderBy, GetNewBindingList и Linq to SQL

2 голосов
/ 23 февраля 2011

У меня есть фоновый работник, который выполняет загрузку данных из базы данных во временную структуру.

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;

Проблема в том, что 3-я строка (d.tbUser = ...) ленива-загружен.Конечно, я могу сделать:

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

Но опять же, это не Bindable List, любые внесенные в него изменения не будут распространяться обратно в БД.

Так что я думаю, что янужно что-то вроде:

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

Но это не работает.Цель состоит в том, чтобы: получить список пользователей, упорядоченный по их имени в виде связываемого списка.Есть идеи?

Спасибо за потраченное время!

1 Ответ

3 голосов
/ 23 февраля 2011

Добавление OrderBy (как и любой другой функции запроса) превращает ваш запрос в IQueryable<TEntity>.К счастью, внутренний тип запроса LINQ-to-SQL (DataQuery<TEntity>) обеспечивает BindingList<TEntity> посредством реализации IListSource.

Чтобы получить BindingList для данного запроса, вы можете сделать это:

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

В вашем случае:

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

Хотя тип возвращаемого значения GetList равен IList, фактически это BindingList<User>.

...