c# - 无法在 winform 的事件处理程序中传递空参数?
问题描述
我想随后对我的搜索应用过滤器说“如果我将 10K 作为 myFee 值,它应该显示所有具有 10K 费用的科目但是如果在此之后我给出 2014 年,它应该显示同时应用费用和年份约束的结果
目前,如果我同时在两个组合框上给出值(费用和年份),我会得到正确的结果 [下图] https://imgur.com/a/dYpCeeP
在这里,我们使用参数调用 GetStudentsByYearEF,但是如果我尝试将任何输入留空,它会在作为参数传递时出错。
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;
}
}
如果想随后对搜索应用过滤器。但是,它适用于在按下搜索按钮时立即进行搜索,但是如果我尝试仅对搜索应用费用约束并将年份约束留空,我会立即给我例外。
解决方案
您的 where 子句检查年份和费用 ifitems.Name.AcademyContains("_courseInputBox") || items.Name.AcademyContains("_feeInputBox")
因此,如果您的 Academy 包含courseinputbox或feeinputbox,它将运行 where 子句。因此,如果 Academy 包含 courseinputbox 但不包含 feeinputbox,您的 where 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();
}
推荐阅读
- c# - C# 等待 Web 服务的线程 CPU 消耗
- java - 使用 Spring MVC、JPA 和 Hibernate 添加 ManyToMany
- wpf - ScrollViewer 的水平 ScrollBar 将固定高度的内容向上推
- javascript - 将标记的模板文字绑定到外部对象
- java - 我无法提供 ViewModel
- json - 将数据帧的多行合并为一条记录
- python - 并行读取 python 搁置对象
- cygwin - 无法让 cygwin 忽略 ZSH 中的回车
- ssl - 如何重现成功的 openssl_verify
- javascript - javascript生成的CSS类不应用样式