Я пытаюсь найти способ разрешить пользователям моего приложения определять свои собственные запросы или фильтры, которые можно применять к коллекции. Я хочу в конечном итоге предоставить интуитивно понятный пользовательский интерфейс для создания этих фильтров (см. Изображение ниже), но сначала было бы нормально, если бы пользователю нужно было ввести строку текстового запроса. Мне также нужно иметь возможность сериализовать эти определенные пользователем запросы в строку, чтобы я мог сохранить их вместе с остальной информацией о проекте.
Пример пользовательского интерфейса http://dl.dropbox.com/u/113068/filterUI.jpg
Я ищу тип функциональности, которую вы бы получили от чего-то вроде SQL-запроса, например числовых условий (меньше, больше), строкового условия (содержит, начинается с, заканчивается) или логического условия (истина или ложь ). Я также хотел бы иметь возможность группировать условия, используя логическую логику, такую как OR, AND и NOT.
Я начал рисовать, как бы сделать это с нуля, используя такие классы, как NodeFilter, AbsNodeCondition, NodeStringCondition, NodeConditionOrJoin и т.д. У меня не было возможности провести с ним много времени.
Могу ли я каким-то образом разрешить пользователю вводить запрос Linq к объектам в текстовом поле, а затем программно превращать строку в реальный запрос Linq, который можно применить к моей коллекции? Или есть другой способ разрешить пользователю создавать и сохранять запросы? Мне также понадобится способ сериализации фильтра / запроса в строку, чтобы я мог сохранить его вместе с остальной информацией о программе.