using System; using System.Collections.Generic; using System.Linq; using System.Text; using EMIS.ViewModel.ScoreManage; using System.Linq.Expressions; using Bowin.Common.Linq; using EMIS.Entities; using EMIS.ViewModel; namespace EMIS.ExtensionLogic.DataLogic.ScoreManage { public class SpecialityScoreSumDAL : EMIS.DataLogic.ScoreManage.SpecialityScoreSumDAL { /// /// /// /// /// /// /// /// /// public override IQueryable GetStudentScoreViewQueryable(Guid? collegeID, int? years, int? schoolyearNumID, int? schoolcodeID, Guid? classmajorID) { List examsStateList = examsStateSettingRepository.GetList(x => x.IsNormal == true).Select(x => x.ExamsStateID).ToList(); Expression> exp = (x => true); if (collegeID.HasValue) exp = exp.And(x => x.CF_Student.CF_Classmajor.CF_Grademajor.CF_Facultymajor.CollegeID == collegeID); if (years.HasValue) exp = exp.And(x => x.CF_Student.CF_Classmajor.CF_Grademajor.GradeID == years); if (schoolyearNumID.HasValue) exp = exp.And(x => x.SchoolyearNumID == schoolyearNumID); if (schoolcodeID.HasValue) exp = exp.And(x => (x.CF_Student.CF_Classmajor.CF_Grademajor.SemesterID + (x.StarttermID - 1)) % 2 == schoolcodeID % 2); if (classmajorID.HasValue) exp = exp.And(x => x.CF_Student.ClassmajorID == classmajorID); var query = from x in finallyScoreRepository.GetList(exp, (x => x.CF_Student), (x => x.CF_Student.Sys_User), (x => x.CF_Schoolyear), (x => x.CF_Student.CF_Classmajor.CF_Grademajor.CF_Facultymajor), (x => x.CF_Student.CF_Classmajor)) join ed in DictionaryItemRepository.GetList(x => x.DictionaryCode == typeof(CF_ExamsState).Name) 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 { 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_Department.CollegeID, CollegeName = x.CF_Department.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, 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, TotalScoreStr = x.TotalScore < 60 ? "重修" : (examsStateList.Any(w => w.Value == x.ExamsStateID) ? (Result.Name ?? ((double)x.TotalScore).ToString()) : f.Name), ScoreCredit = x.ScoreCredit ?? 0, GradePoint = x.GradePoint, Remarks = x.Remark, StudentScoreRemark = x.Remark, CreateTime = x.CreateTime, CreateUserID = x.CreateUserID, Pingshi = Math.Round(x.ER_FinallyScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Peacetime).FirstOrDefault().Score ?? 0, 0), Jishu = Math.Round(x.ER_FinallyScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Technique).FirstOrDefault().Score ?? 0, 0), Lilun = Math.Round(x.ER_FinallyScoreDetail.Where(q => q.ScoreTypeID == (int)EMIS.ViewModel.CF_ScoreType.Theoretical).FirstOrDefault().Score ?? 0, 0) }; return query.OrderByDescending(x => x.SchoolyearCode); } } }