Фильтрация DataGrid, MVVM, Dynamic LINQ

Как я могу отфильтровать элементы DataGrid, как работает фильтр MS Access (просто выделите мышью какую-то часть ячейки и нажмите кнопку «Фильтр»)?

У меня есть ViewModel MyViewModel с двумя командами (фильтр и ClearFilter) и ObservableCollection. У меня есть модель с методом GetItems (...);

в событии DataGrid CellEditEnding я сохраняю выбранный путь и имя столбца:

_selectedColumn = e.Column;
if (e.EditingElement is TextBox)
    _selectedText = (e.EditingElement as TextBox).SelectedText;

Итак, у меня есть 2 параметра: имя свойства моего объекта T, по которому необходимо отсортировать, и значение фильтра (оба типа String).

Как мне изменить метод модели GetItems, что бы он работал. Метод Model.GetItemws использует EntityFramework для запроса элементов из базы данных. Как я могу применить к этому запросу мой фильтр и как я могу построить этот запрос? Некоторые динамические LINQ / Expression

var items = EFQuery().**Where(myFilter)**.ToList();

Где и как мне создать этот myFilter?


person Lari13    schedule 27.12.2010    source источник
comment
Это может помочь.   -  person KMån    schedule 27.12.2010
comment
Спасибо. Это помогло с PredicateBuilder и LinqKit   -  person Lari13    schedule 27.12.2010


Ответы (1)


Вы можете написать лямбду-фильтр следующим образом:

.Where(x => x.GetType().GetProperty(AA).GetValue(x).ToString().Contains(BB))

Где AA - это переменная, которая содержит имя выбранного столбца

BB - это переменная, содержащая текст фильтра.

Ограничение: ваше свойство AA должно быть строкой или классом, переопределившим метод ToString.

person Vladyslav Ishchuk    schedule 28.06.2019