我希望随后对我的搜索应用过滤器说“如果我将10K作为myFee值,它将显示所有包含10K费用的主题,但是如果在此之后我给出2014年,它将显示同时应用费用和年约束的结果< / p>
当前,如果我同时在两个comboBoxes上给出值(费用和年份),我将得到正确的结果 [下方图片] https://imgur.com/a/dYpCeeP
在这里,我们使用参数调用GetStudentsByYearEF 但是,如果我尝试将任何输入保留为null,则在作为参数传递时会出错。
string _readYear = _yearInputBox?.SelectedItem.ToString();
var _readFee = _feeInputBox?.SelectedItem.ToString();
var readfee = Convert.ToInt32(_readFee);
if (_readYear != string.Empty && readfee != null && readfee > 0)
{
var students = AcademyHelper.GetStudentsByYearEF(readfee, _readYear, this.dataGridView2, this, this.groupBox5);
this.dataGridView2.DataSource = students;
}
GetStudentsByYearEF()的定义
public static IEnumerable<Student> GetStudentsByYearEF(int fee, string year, DataGridView dtg, Form form, GroupBox groupbox)
{
List<Student> searchedStudent = new List<Student>();
using (var retrive = new Models.Academy_MSDBEntities())
{
foreach (Control items in groupbox.Controls)
{
//removed .tolower() from here
if (items.Name.AcademyContains("_courseInputBox") || items.Name.AcademyContains("_feeInputBox"))
{
var query = retrive.Students
.Where(s => s.Year == year && s.Fees==fee).ToList();
searchedStudent.AddRange(query);
retrive.SaveChanges();
}
}
return searchedStudent;
}
}
如果要随后在搜索中应用过滤器。但是,它适用于按搜索按钮一次进行的搜索,但是如果我尝试仅对搜索应用“费用”约束,而将“年”约束保留为空,则会立即给我例外。
答案 0 :(得分:0)
如果items.Name.AcademyContains("_courseInputBox") || items.Name.AcademyContains("_feeInputBox")
因此,如果您的学院包含courseinputbox OR feeinputbox,它将运行where子句。因此,如果Academy包含courseinputbox但不包含feeinputbox,则您的caluse将尝试使用费用值进行过滤。
在运行where子句之前,您需要添加费用的空支票。像这样:
if(fee != null){
var query = retrive.Students
.Where(s => s.Year == year && s.Fees==fee).ToList();
searchedStudent.AddRange(query);
retrive.SaveChanges();
}else{
var query = retrive.Students
.Where(s => s.Year == year).ToList();
searchedStudent.AddRange(query);
retrive.SaveChanges();
}