Запрос Linq для получения ранга на основе b
в базе данных идентификатор пользователя 1022 завершил 2 единиц( идентификационный номер:100 и 101) ID пользователя 1021 завершена 3 единицы (ИД:100,101,102) если я передаю имя пользователя (1022)столбцами courseid(109) семафоров semid(3000) subjectid(2006), то результат shoild быть средней scoredmarks/totalmarks * 100, что составляет 77,5 и ранг User1022 1 и пользователей 1021 ранг Б 2
В приведенном ниже коде при близком возврате я получаю ошибку вместо этого оператора return мне нужен один запрос для достижения вышеуказанных критериев
Что я уже пробовал:
public GetCalculatePerform(int? Student_ID, int? CourseID, int? SemID, int? SubjectID) { var scoreCard = dbcontext.Stu_Result .Where(u => u.CourseID == CourseID && u.SemID == SemID && u.SubjectID == SubjectID); return scoreCard.GroupBy(u => u.UserID).OrderByDescending(g => g.Average(u => u.ScoredMarks / u.TotalMarks * 100)).Select ((g, i) => new UserRankObject { UserId = (int)g.Key, Rank = i + 1, AverageScore = g.Average(u => u.ScoredMarks / u.TotalMarks * 100) }).Single(u => u.UserId == Student_ID); }
RID UserID CourseID SemID SubjectID UnitID ScoredMarks TotalMarks No_Attempts CreatedDate ModifiedDate 1 1021 109 3000 2006 100 30 100 1 2019-02-12 00:00:00.000 NULL 2 1021 109 3000 2006 101 40 100 1 2019-02-18 00:00:00.000 NULL 3 1021 109 3000 2006 102 85 100 1 2019-02-19 00:00:00.000 NULL 4 1022 109 3000 2006 101 80 100 1 2019-02-19 00:00:00.000 NULL 5 1022 109 3000 2006 100 75 100 1 2019-02-19 00:00:00.000 NULL