Я задал этот вопрос на более чем одном форуме, и, похоже, никто даже не захочет взять на него безумство.Коллекции от LINQ to SQL и способность фильтровать
Моя проблема проста, и я бы догадался, что каждый столкнулся с ней при использовании LINQ to SQL.
Если ваш есть объект LINQ под названием: Человек и вы хотели бы poulate окна списка, основываясь на всех человек, у вас есть в вашей БД задача проста:
BindingListCollectionView view;
view = (BindingListCollectionView)CollectionViewSource.GetDefault (dataContext.Persons);
Теперь говорит, что вы хотите для фильтрации результатов используйте текстовое поле над списком. что не будет работать, поскольку интерфейс IBindingList, реализованный объектами LINQ to SQL, возвращает false в свойстве CanFilter.
Что большинство людей делают, это создать ObservebleCollection, следующим примером является im sure, что большинство из вас используют.
ObservebleCollection<Person> col = new ObservebleCollection<Person>(dataContext.Persons.ToList());
ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefault(col);
Так как это будет возвращать ListCollectionView и не BindingListCollectionView будет filterbale и все хорошо с миром.
Здесь возникает проблема, что у вас есть Многопользовательская уровни внешний ключ отношений: Person < --- Псевдоним < --- Билеты
и теперь вы хотите иметь 3 окна списка привязываться при выборе лица во втором окне списка будет отображаться только его псевдоним, и когда будет выбран Alias, будет показан только его билет, это очень просто с привязкой и синхронизацией. проблема в том, что я хочу добавить фильтр текстовых полей на узлах всех списков (скажем, у человека более 1000 псевдонимов, и я хочу, чтобы их можно было фильтровать, чтобы выбрать 1).
Неприемлемое решение ObservebleCollection не будет работать, поскольку все возвращенные объекты Person будут иметь объекты EntitySet для отношения forgin, и это снова вернет noneBbindingListCollectionView none, а не ListCollectionView.
Единственный способ, которым я нашел это, - это вручную сбросить ObserverbleCollection на основе повторного запроса, это утомительная работа и заставляет меня связывать слой BusnessObjects и слой приложения. также очень медленно, так как вам нужно сделать много поездок в базу данных ...
У кого-нибудь есть решение?
Thanks, Eric.