Хорошо, я задавал этот вопрос раньше, но удалил его, так как описал мою проблему неправильно.
Во-первых, позвольте мне заявить, что я создаю приложение .NET3.5 Winforms, используя C # и Plinqo (Professional Linq to Objects) в качестве моего ORM. Вот моя ситуация: у меня есть DataGridview, который заполняется из SortableBindingList<T>
- в моем случае, сформированный из List<Task>
, который просто представлен следующим образом:
public class Task {
public long TaskID { get; set; }
public string TaskDescription { get; set; }
public enumPriority TaskPriority { get; set; }
public DateTime DueDate { get; set; }
public double PercentageComplete { get; set; }
}
Теперь я хочу предоставить диалоговое окно для моего пользователя, чтобы позволить ему / ей фильтровать этот список. Я предполагаю передачу списка имен свойств и связанного DataType в диалог, который я могу использовать для заполнения ComboBox. Таким образом, пользователь будет выбирать, какое свойство он хочет запросить, из comboBox, и на основе этого выбора пользователю будут доступны соответствующие средства сравнения и пользовательского интерфейса для ввода в свои критерии. И наконец, в конце он будет содержать переключатель AND / OR, который пользователь может использовать для добавления дополнительного критерия. Каждый критерий будет объектом типа FilterItem
, как показано ниже:
public class FilterItem {
public string MappedPropertyName { get; set; }
public enumComparer Comparer { get; set; }
public object FilterValue { get; set; }
public enumOpertor Operator { get; set; }
}
После того, как пользователь создаст свой запрос, я собираюсь передать его как List<FilterItem>
обратно в мою форму вызова, которая затем может пройти по списку и позволить мне отфильтровать исходный List<Task>
.
Это все хорошо, и я могу с легкостью собрать это вместе. Но я хочу удостовериться, что механизм фильтра ACTUAL, с которым я работаю, максимально строгий типизированный, и не использует скрытые строки, как в Dynamic Query Library. (Раньше я делал нечто подобное с ADO.NET, DataViews и динамическим построением строки RowFilter)
Я прочитал статью PredicatBuilder и Джозефа Албахари на tomasp.net , но мне кажется, что она сильно смущена этим и деревьями выражений в целом.
Я искренне прошу вашей помощи, чтобы помочь мне лучше понять эти концепции и как использовать их так, чтобы моя предполагаемая архитектура могла работать с ними.
Большая благодарность!