#wpf #c#-4.0 #entity-framework-4
#wpf #c #-4.0 #entity-framework-4
Вопрос:
Кажется, что это должно быть просто, но я, по-видимому, слишком туп, чтобы понять это. Я получаю ObjectResult с помощью простого ObjectQuery
; это всего лишь несколько записей в таблице данных. Я присваиваю его CollectionViewSource
свойству источника. Затем я смотрю на свойство View CollectionView
и вижу, что CanFilter
и CanSor
t оба являются ложными. Когда я получаю DefaultView как BindingListCollectionView, он показывает, что значение CanCustomFilter
равно false . Поскольку они доступны только для чтения, я не могу изменить значение (значения). Теперь я хотел бы установить фильтр (или сортировку) для полученных данных, не возвращаясь к SQL Server, но, хоть убейте, я не могу найти способ получить данные с этими свойствами, установленными true.
Я попытался использовать ObjectResult.AsQueryable<T>()
, и результат ИМЕЕТ CanFilter
значение и CanSort
true, но это меняет тип представления с System.Windows.Data.BindingListCollectionView
into MS.Internal.Data.EnumerableCollectionView
, и я не могу найти способ вернуть его EnumerableCollectionView
обратно в a BindingListCollectionView
.
Любые указатели были бы весьма признательны.
Комментарии:
1. Вы не можете фильтровать или сортировать
ObjectResult
. Это невозможно, потомуObjectResult
что может быть прочитано только один раз, поэтому, если вы визуализируете его в первый раз, результат считывается, и любая другая операция, связанная с его повторным чтением, завершится неудачей.
Ответ №1:
Я думаю, что основная причина такого отклонения заключается в том, что BindingListCollectionView
невозможно отфильтровать или отсортировать какие-либо IQueryable
объекты (не знаю почему), несмотря на выполнение запроса при настройке Source property
. Самый простой способ — использовать ToList<T>()
метод, который выполняет запрос, но сформированный List<T>
может быть отсортирован и отфильтрован с помощью BindingListCollectionView
Комментарии:
1. Спасибо, Аспирин, это действительно работает. Однако, как только источник привязан к результатам ToList<T>() , теперь это ListCollectionView, а не BindingListCollectionView, поэтому необходимо использовать соответствующий подход к фильтрации, т.Е. Установить представление. Filter = новый предикат<объект>(), и пользовательский фильтр с его синтаксисом не может быть использован. Итак, хотя это обходной путь, он не отвечает на мой вопрос. Кстати, в другом элементе управления (они находятся в полях со списком) я использовал StyleSelector для выполнения фильтрации — еще один обходной путь, но не то, что я хотел бы сделать.
2. почему вы устанавливаете в фильтр пустой предикат? PS ListCollectionView реализует те же интерфейсы, что и BindingListCollectionView и IEditableCollectionViewAddNewItem
3. Я не использую пустой предикат фильтра; Я просто указывал, что я должен использовать эту форму фильтра (синтаксис). Фактическая запись — viewType . Фильтр = новый предикат<объект>(фильтр. FilterSubmittalType);