【发布时间】:2009-11-27 12:24:19
【问题描述】:
好的,我之前问过这个问题,但是因为我描述问题的方式错误而将其删除。
首先,让我声明我使用 C# 和 Plinqo(Professional Linq to Objects)作为我的 ORM 创建了一个 .NET3.5 Winforms 应用程序。这是我的情况:我有一个从 SortableBindingList<T> 填充的 DataGridview - 在我的情况下,它由 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 的对话框中。因此,用户将从组合框中选择他们想要查询的属性,并根据选择提供适当的比较器和 UI 控件供用户输入他们的条件。最后,它将在末尾包含一个 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 过滤器机制是尽可能强类型的,而不是像在动态查询库中那样使用构建的字符串。 (我以前用 ADO.NET、DataViews 和动态构造 RowFilter 字符串做过类似的事情)
我已经阅读了 Joseph Albahari 的 PredicatBuilder 和 an article on tomasp.net,但我似乎对它和一般的表达式树感到很困惑。
我真诚地寻求您的帮助,帮助我更好地理解这些概念,以及如何使用它,以便我的预期架构可以使用它。
非常感谢!
【问题讨论】:
标签: winforms dynamic filter linq-to-objects