2014-08-28 6 views
0

У меня есть элемент управления ComponentOne Grid в приложении WinForm, и я бы хотел привязать «LINQ Query» вместо всего DbSet.WinForms Data Entity Framework 6

Если мне нужен полный DbSet ответ здесь: Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported Entity Framework 5

gridControl1.DataSource = context.capitulo.Local.ToBindingList(); 
context.capitulo.Load(); 

Но это не будет работать, если я хочу, чтобы положить заказ и/или где условия, как:

gridControl1.DataSource = context.capitulo.OrderBy(x => x.Id).Local.ToBindingList(); 
context.capitulo.Load(); 

Потому что Local является собственностью DbSet, а не IQuerable. Я нашел много решений для WPF, но не для WinForms.

ответ

0
var capituloList = new ObservableCollection<capitulo>(context.capitulo.Local.OrderBy(x => x.Id)); 

gridControl1.DataSource = capituloList.ToBindingList(); 

context.capitulo.Load(); 
+0

С этим решением я избегаю связывания, когда я добавить или удалить одну строку на сетке. Он работает только для обновления существующих значений. – Nazareno

0

Вам необходимо применить запрос LINQ к коллекции с возможностью связывания и получить другую связанную коллекцию. Это делается с помощью LiveLinq, входящего в состав компонентов ComponentOne (вместе с C1DataSource, есть один в ComponentOne WinForms), поэтому вы, вероятно, имеете его. Просто используйте метод расширения AsLive():

gridControl1.DataSource = context.capitulo.Local.AsLive(). OrderBy (x => x.Id);

Чтобы AsLive() доступны, вам нужно

с использованием C1.WPF.LiveLinq;

(но WPF здесь не означает, что вы используете WPF, это просто имя, вы все еще в WinForms)

+0

Это дает мне эту ошибку: коллекция не относится к типу EntityCollection . – Nazareno