戳戳猫的小窝
更新日志
关于
在创建服务之前,我们需要清楚我们要做什么。 至少要知道这个服务要做什么,需要接收什么参数,做什么处理,返回什么数据。 因此我们简单叙述服务要做的事情: 1. 接收查询视图模型SearchViewModel; 2. 将视图模型中的6个查询条件传递给仓库类; 3. 获取仓库类返回的学生模型列表; 4. 将学生模型列表转换为学生视图模型列表,并将值赋给Results属性; 5. 获取专业下拉列表,并赋值给Majors; 6. 获取年级下拉列表,并赋值给Grades; 7. 返回模型; 于是,我们可以按照这样一个思路先想服务创建出来。 # 创建SearchService 在Services文件夹下创建SearchService服务类文件。 注入StudentRepo,MajorRepo,GradeRepo实例。 创建GetList方法。 代码如下: ``` public class SearchService(StudentRepo studentRepo, MajorRepo majorRepo, GradeRepo gradeRepo) { public SearchViewModel GetList(SearchViewModel model) { List<Student> students = studentRepo.GetList(model.MajorId, model.GradeId, model.ClassId, model.Gender, model.Name, model.Number); foreach (var student in students) { model.Results.Add(new ResultViewModel() { MajorName = student.Class.Major.Name, GradeName = student.Class.Grade.Name, ClassName = student.Class.Name, Number = student.Number, Name = student.Name, Gender = student.Gender, Birthday = student.Birthday }); } List<Major> majors = majorRepo.GetList(); model.Majors = new SelectList(majors, "Id", "Name"); List<Grade> grades = gradeRepo.GetList(); model.Grades = new SelectList(grades, "Id", "Name"); return model; } } ``` 最后将SearchService注册为服务。 ``` services.AddScoped<SearchService>(); ``` 这样写完程序会报错,StudentRepo中并不存在这种参数的GetList方法,因此我们需要在StudentRepo中创建一个新的GetList方法。 # 创建GetList方法 在StudentRepo中创建一个新的GetList方法。 这个方法接收6个参数,并且均可为空。 如果某参数为空,则这一项就不筛选。 最终代码如下: ``` public List<Student> GetList(Guid? majorId, Guid? gradeId, Guid? classId, bool? gender, string? name, string? number) { IQueryable<Student> query = DbSet.AsQueryable(); query = query.Include(s => s.Class).ThenInclude(c => c.Major).Include(s => s.Class).ThenInclude(c => c.Grade); if (majorId != null) { query = query.Where(s => s.Class.MajorId.Equals(majorId)); } if (gradeId != null) { query = query.Where(s => s.Class.GradeId.Equals(gradeId)); } if (classId != null) { query = query.Where(s => s.ClassId.Equals(classId)); } if (gender != null) { query = query.Where(s => s.Gender.Equals(gender)); } if (name != null) { query = query.Where(s => s.Name.Contains(name)); } if (number != null) { query = query.Where(s => s.Number.Equals(number)); } return query.ToList(); } ``` 其中`Where(s => s.Name.Contains(name))`是一个模糊查询,只要名字包含输入的字符,就将此数据筛选出来。
创建服务