希望我问这个问题的方式是正确的。
我正在尝试确定使用复选框来更改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();