牵线,想起过去不久的七夕,喜鹊为牛郎织女搭起约会的鹊桥,看是多美丽的天衣无缝的相逢。
最近在做高校云4.0项目,从考评跑到UI,成功地被调到成绩系统。说实话对成绩系统的需求真的不了解,交接工作时从需求文档、项目组长和之前版本开发人员指导下知道大概有系统设置、教师端、学生端,不等一天的时间大概了解系统设置等模块的需求。
开始分配了三个任务,好玩是的导出excel将系统运行起来基本没有大问题;页面有横向滚动条是UI方面的问题暂时不用解决;就剩下调试页面表格显示布局,这个很简单的很快就完成有点点小小欣慰。
好戏在后头,马上就来。一个DataGrid表格缝纫为牛郎织女提供一个约会的舞台,页面表格的出来来之两张数据库表,这可怎么办?开始查阅资料开始与开发团队交流,突然发现伙伴们基本没有做过,小编转动小脑袋,这何不是机会?和伙伴们交流了实现思路,便开始明知山有虎偏向虎山行,各种尝试也各种请教没有预期的效果这可把小编急。
先来了解它们之前的关系和要达到的效果吧:假如页面显示的数据来至两张表1和2,表2中有一个表1的主键作为外键,需要通过这个外键查询表2的比例值
某年某月某一天终于拨开云雾见月明,让我们一起见证这个神秘的面纱是多么的简单:
public List<RateViewModel> PageQueryRate(int pageSize, int pageIndex, out int total)
{
//实例化DictionaryBll
DictionaryBll dictionaryBll = new DictionaryBll();
//分页查询ResultRateSet数据
List<ResultRateSet> listRate = this.CurrentDal.LoadPageItems(pageSize, pageIndex, out total, s => s.isDeleted == 0, s => s.courseID, true).ToList();
//实例化一个设置的viewmodel
List<RateViewModel> listVmRate = new List<RateViewModel>();
//循环:通过外键到字典表取值
for (int i = 0; i < listRate.Count(); i++)
{
Guid ID = listRate[i].resultRateSetID; //ResultRateSet主键
//通过ResultRateSet主键ID查询ResultDictionaryEntity数据
List<ResultDictionaryEntity> listResult = dictionaryBll.CurrentDal.LoadPageItems(pageSize, pageIndex, out total, e => e.resultRateSetId ==ID , e => e.resultRateSetId, true).ToList();
RateViewModel VmRate = new RateViewModel();
//循环赋值
for (int j = 0; j < listResult.Count(); j++)
{
VmRate.resultRateSetID = listRate[i].resultRateSetID; //课程ID
VmRate.year = listRate[i].year; //学年
VmRate.courseName = listRate[i].courseName; //课程名称
VmRate.teacherName = listRate[i].teacherName; //教师名称
VmRate.setTime = (DateTime)listRate[i].setTime; //设置时间
VmRate.dictionaryName = listResult[j].dictionaryName; //比例名称
//如果比例名称是“平时比例”
if (VmRate.dictionaryName == "平时比例")
{
//则给平时比例赋值
VmRate.usualRate = listResult[j].remarks;
}
//如果比例名称是“期末比例”
if (VmRate.dictionaryName == "期末比例")
{
//则给期末比例赋值
VmRate.finalRate = listResult[j].remarks;
}
//如果比例名称是“考勤比例”
if (VmRate.dictionaryName == "考勤比例")
{
//则给考勤比例赋值
VmRate.timeRate = listResult[j].remarks;
}
//如果比例名称是“实践比例”
if (VmRate.dictionaryName == "实践比例")
{
//则给实践比例赋值
VmRate.practiceRate = listResult[j].remarks;
}
}
listVmRate.Add(VmRate);
}
return listVmRate; //返回集合实体
}
注意的是:在RateViewModel中DictionaryViewModel即主表的viewmodel有需要用到的从表的属性。这种方法有大的改进空间,也一起见证奇迹:
当然也可以通过SQL语句实现:
string sqlQueryRate = "select * from ResultDictionaryEntity join ResultRateSet on ResultDictionaryEntity.resultRateSetId=ResultRateSet.resultRateSetID where ResultRateSet.resultRateSetID='c267c7eb-af14-48df-a278-349152ec314d'";
不过这个方法还有点小问题就是在用map转换成viewmodel时表2的数据没了,这个问题有待于研究,大家多多指教。
在此时看UI、后台代码时不再是无底线的陌生。动人的牵线美的连接符-两张表的查询(一),说明还会有不少于“二”,敬请期待。