使用winform复选框来linq查询



希望我问这个问题的方式是正确的。

我正在尝试确定使用复选框来更改linq查询返回的内容的最有效方法,而不必为每种可能的组合进行编码。

举个例子,我在winform上有三个复选框,代表我试图查询的三列

[]年

[]制作

[]型号

我使用linq语句来通过EF 确定年份和型号的不同组合

var uniquecombos = cb.MakeModelYear.Where(i => i.Year != null && i.Make != null && i.Model != null).Distinct().ToList();

我想做的是使用winform上的复选框来驱动查询中包含的字段。

所以

[x] 年度

[x] 制作

[]型号

将产生

var uniquecombos = cb.MakeModelYear.Where(i => i.Year != null && i.Make != null).Distinct().ToList();

有没有一种很好的方法可以修改查询的输入,而不必通过if语句来考虑每个复选框的组合?

提前感谢!

由于您有单独的属性,您仍然需要hceck每个属性,但您可以同时考虑每个复选框组合:

.Where(i => (
             (!cbxYear.Checked  || i.Year != null) && 
             (!cbxMake.Checked  || i.Make != null) && 
             (!cbxModel.Checked || i.Model != null)
            )

您可以这样做:

var query = cb.MakeModelYear;
if (chkYear.Checked)
    query = query.Where(i => i.Year != null);
if (chkMake.Checked)
    query = query.Where(i => i.Make != null);
if (chkModel.Checked)
    query = query.Where(i => i.Model != null);
var uniquecombos = query.Distinct().ToList();

相关内容

  • 没有找到相关文章

最新更新