使用winform复选框进行Linq查询

3
希望我用正确的方式提出这个问题。
我正在尝试确定使用复选框最有效的方式,以更改从我的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语句考虑每个复选框的组合?

提前致谢!

2个回答

1
由于您有单独的属性,因此仍然需要检查每个属性 - 但您可以同时考虑每个复选框组合:
.Where(i => (
             (!cbxYear.Checked  || i.Year != null) && 
             (!cbxMake.Checked  || i.Make != null) && 
             (!cbxModel.Checked || i.Model != null)
            )

太棒了!谢谢! - markdozer

1
你可以像这样做:

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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接