基于 UI 输入动态构建 linq 查询

Dynamically building linq query based on UI input

我正在为我的应用程序构建一个过滤器,允许用户在多个属性上过滤一组自定义对象。为了清楚起见,我提供了一个屏幕截图,我正在实现的是左上角的浅蓝色控件:

想法是,对于选中复选框并填写文本的每个字段,将向搜索添加一个子查询,并由 "AND" 连接。我需要对子查询进行相当微调的控制,因为它们有自己的细节。例如,"ON YOMI" 是目标对象上的字符串列表,因此查询将如下所示:

Where(k => k.OnYomi.Contains(tb_OnYomi.Text))

"Meaning" 想要进行全文搜索,例如 String.Contains 或 LIKE,"Stroke count" 将需要一些解析,因为它必须支持范围,例如,如果您键入 5 -8,查询应如下所示:(x >=5 && x <=8)。 "Other" 需要根据在组合框中选择的值定位不同的 属性。

我在 MSDN 上找到了这个,坦率地说,我无法理解它: https://msdn.microsoft.com/en-us/library/bb882637.aspx

有人可以提供更好的解释或更易于理解的示例吗?谢谢。

表达式树解决方案太过分了。如果您从 IQueryable 开始,您可以像这样动态添加谓词,然后当您在末尾枚举结果时,它将只处理一次所有谓词(动态)组合:

var data = sourceData.AsQueryable();

if (!String.IsNullOrWhiteSpace(tb_OnYomi.Text))
    data = data.Where(k => k.OnYomi.Contains(tb_OnYomi.Text))

if (!String.IsNullOrWhiteSpace(tb_KunYomi.Text))
    data = data.Where(k => k.KunYomi.Contains(tb_KunYomi.Text))

// etc

var result = data.ToList();    // evaluates all dynamically added predicates at once.

// display result to the user.