寻找构建Linq动态/条件表达式的简单方法

mic*_*kro 3 c# linq

给出表格如下:

表格1

  • ID
  • stringfield1
  • stringfield2
  • stringfield3
  • stringfield4

表2

  • ID
  • table1_id
  • stringfield1
  • datefield1

给定UI允许用户进行fency查询:

  • dropdwonlist1包含anytable1.stringfield1
  • dropdwonlist2包含anytable1.stringfield2
  • dropdwonlist3包含anytable1.stringfield3
  • dropdwonlist4包含anytable1.stringfield4
  • dropdwonlist5包含anytable2.stringfield1
  • dropdwonlist6与[ any,the,before,after,之间 ]
  • calendar1与table2.datefield1链接
  • calendar2与table2.datefield1链接

结果datagridview与everyfields.

我想建立条件查询,好像不是"任何"添加这个条件.

考虑到这一点,简单的LINQ查询不适用:

Table2
  .Where(x => x.stringfield1 == dropdwonlist1.SelectedValue)
  .Where(x => x.stringfield2 == dropdwonlist2.SelectedValue)
  .Where(x => x.stringfield3 == dropdwonlist3.SelectedValue)
(...)
Run Code Online (Sandbox Code Playgroud)

文档中有表达式树,但看起来太多了.

有最简单的方法来构建我的动态查询吗?

das*_*ght 6

表达树看起来比它们更可怕,但你是对的,在你的情况下它们是不必要的:你可以使用一个足够聪明的静态条件来忽略没有选择的下拉列表.你可以这样做:

Table2
.Where(x => dropdwonlist1.SelectedValue == null || x.stringfield1 == dropdwonlist1.SelectedValue)
.Where(x => dropdwonlist2.SelectedValue == null || x.stringfield2 == dropdwonlist2.SelectedValue)
.Where(x => dropdwonlist3.SelectedValue == null || x.stringfield3 == dropdwonlist3.SelectedValue)
Run Code Online (Sandbox Code Playgroud)