using System; using System.Collections.Generic; using System.Linq; using System.Text; using EMIS.ViewModel.ScoreManage; using EMIS.Entities; using System.Linq.Expressions; namespace EMIS.ExtensionLogic.DataLogic.ScoreManage { public class StudentScoreDAL : EMIS.DataLogic.ScoreManage.StudentScoreDAL { /// /// 已提交成绩 /// /// /// public override IQueryable GetStudentScoreViewQueryable(Expression> exp) { List examsStateList = examsStateSettingRepository.GetList(x => x.IsNormal == true).Select(x => x.ExamsStateID).ToList(); var query = from x in submitedScoreRepository.GetList(exp) join u in userRepository.Entities on x.CreatorUserID equals u.UserID into user from a in user.DefaultIfEmpty() join ed in DictionaryItemRepository.GetList(x => x.DictionaryCode == "CF_ExamsState") on x.ExamsStateID equals ed.Value into ged from f in ged.DefaultIfEmpty() join d in DictionaryItemRepository.GetList(x => x.DictionaryCode == "CF_ResultType") on x.ResultTypeID equals d.Value join rd in ResultTypeDetailRepository.GetList(x => true) on d.Value equals rd.ResultTypeID into ResultTypeDetail from Result in ResultTypeDetail.DefaultIfEmpty() where (Result.ResultTypeDetailID != null && ((x.TotalScore <= Result.MaxScore && Result.MinScore <= x.TotalScore && (Result.MaxScoreOperator == "<=" && Result.MinScoreOperator == "<=")) || (x.TotalScore <= Result.MaxScore && Result.MinScore < x.TotalScore && (Result.MaxScoreOperator == "<=" && Result.MinScoreOperator == "<")) || (x.TotalScore < Result.MaxScore && Result.MinScore < x.TotalScore && (Result.MaxScoreOperator == "<" && Result.MinScoreOperator == "<")) || (x.TotalScore < Result.MaxScore && Result.MinScore <= x.TotalScore && (Result.MaxScoreOperator == "<" && Result.MinScoreOperator == "<=")) )) || (Result.ResultTypeDetailID == null) select new StudentScoreView { SubmitedScoreID = x.SubmitedScoreID, SchoolyearID = x.SchoolyearID, SchoolyearCode = x.CF_Schoolyear.Code, SchoolyearNumID = x.SchoolyearNumID, ClassName = x.ClassName, GrademajorID = x.CF_Student.CF_Classmajor.CF_Grademajor.GrademajorID, GrademajorCode = x.CF_Student.CF_Classmajor.CF_Grademajor.Code, GrademajorName = x.CF_Student.CF_Classmajor.CF_Grademajor.Name, ClassmajorID = x.CF_Student.CF_Classmajor.ClassmajorID, ClassmajorCode = x.CF_Student.CF_Classmajor.No, ClassmajorName = x.CF_Student.CF_Classmajor.Name, CollegeID = x.CF_Student.CF_Classmajor.CF_Grademajor.CF_Facultymajor.CollegeID, CollegeName = x.CF_Student.CF_Classmajor.CF_Grademajor.CF_Facultymajor.CF_College.Name, DepartmentID = x.DepartmentID, DepartmentName = x.CF_Department.Name, CoursematerialID = x.EM_Coursematerial.CoursematerialID, CourseCode = x.EM_Coursematerial.CourseCode, CourseName = x.EM_Coursematerial.CourseName, CourseTypeID = x.CourseTypeID, ExamsCategoryID = x.ExamsCategoryID, ExaminationModeID = x.ExaminationModeID, Credit = x.Credit ?? 0, ExamsDatetime = x.ExamsDatetime, ResultTypeID = x.ResultTypeID, CreatorUserID = x.CreatorUserID, CreatorUserCode = a.LoginID, CreatorUserName = a.Name, EntryDeadlineTime = x.EntryDeadlineTime, ExaminationType = x.ExaminationType, StarttermID = x.StarttermID, UserID = x.UserID, LoginID = x.CF_Student.Sys_User.LoginID, UserName = x.CF_Student.Sys_User.Name, ExamsStateID = x.ExamsStateID, TotalScore = x.TotalScore, //暂时按此种逻辑处理。。后续优化(廖兵良) //已经优化--20180517李晓林 TotalScoreStr = x.TotalScore < 60 ? "重修" : (examsStateList.Any(w => w.Value == x.ExamsStateID) ? (Result.Name ?? ((double)Math.Round(x.TotalScore.Value, 1)).ToString()) : f.Name), ScoreCredit = x.ScoreCredit ?? 0, GradePoint = x.GradePoint, Remarks = x.Remark, StudentScoreRemark = x.Remark, CreateTime = x.CreateTime, CreateUserID = x.CreateUserID, TotalHours = x.TotalHours, Pingshi = x.ER_SubmitedScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Peacetime).FirstOrDefault().Score == null ? (decimal?)null : Math.Round(x.ER_SubmitedScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Peacetime).FirstOrDefault().Score ?? 0, 0), Jishu = x.ER_SubmitedScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Technique).FirstOrDefault().Score == null ? (decimal?)null : Math.Round(x.ER_SubmitedScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Technique).FirstOrDefault().Score ?? 0, 0), Lilun = x.ER_SubmitedScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Theoretical).FirstOrDefault().Score == null ? (decimal?)null : Math.Round(x.ER_SubmitedScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Theoretical).FirstOrDefault().Score ?? 0, 0), HandleModeID = x.HandleModeID, }; return query; } } }