Как ты это делаешь?
Я сижу здесь и пытаюсь сделать вещи проще для себя и других. Но я не могу решить, какой путь будет лучшим. Вопрос в следующем:
Начните с сбора чего-либо из контекста данных, а затем начните фильтровать по целому ряду различных критериев. Если это, то те или, возможно, те, если не это, не то, а то, и то, и то, и другое, и за холмом, если не что иное, тогда назад, вверх и дальше.
Ладно, может быть, не так уж сложно ... но мне нужно построить деревья, подобные этим:
start
|
x
|
x
/ \
x x
| |
x x
\ /
x
/ \
x x
| |
x |
| |
x x
\ /
x
|
result
Где |
представляет And
, а ветви представляют Or
. Из-за Or
альтернативных путей я не могу использовать data.Where(...).Where(...).Where(...)
до конца. И использование таких вещей, как Union
и Concat
, имеет тенденцию к краху (на самом деле пока не удалось использовать его в рабочем состоянии). Другими словами, мне нужно создать Expression<Func<T, bool>>
экземпляров.
Я создал методы расширения для добавления их вместе с AndAlso
и OrElse
(с большой помощью из Marc . Я начал создавать класс построителя предикатов для сделать вещи еще немного проще. План состоит в том, чтобы создать цепочки And
-материалов, а затем Or
их вместе ... вроде ...: p
В любом случае, я просто не могу решить, хорошие это идеи или нет. Я думаю, что путь, по которому я сейчас пошел, вероятно, может закончиться хорошей «рабочей средой» для меня, когда я буду кодировать эти цепочки. Но мне любопытно узнать, как другие решают эти проблемы. Что, я думаю, может быть довольно распространенным явлением, по крайней мере, в приложениях, которые должны фильтровать и обрабатывать данные всевозможными странными способами, а затем отображать их пользователю.