Запрос Linq для получения ранга пользователя на основе общих единиц измерения
Например, если пользователь user1[ID пользователя:1021] завершает экзамен по Unitid: 100,101 и 102 и если пользователь2[ID пользователя:1022] завершает экзамен по UnitID 100 и 101.
Если я проверяю ранг и средний балл пользователя 2, то он должен сопоставить завершенные единицы пользователя 1, которые равны 100 и 101, а не 102.
Что я уже пробовал:
база данных:
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
Запрос:
var scoreCard = dbcontext.Stu_Result .Where(u => u.CourseID == CourseID && u.SemID == SemID && u.SubjectID == SubjectID) .ToList() .GroupBy(u => u.UserID) .OrderByDescending(grp=>grp.Average(u => u.ScoredMarks)) .Select((grp, i) =>new { UserId = grp.Key, Rank = i+1, AverageScore = grp.Average(u => u.ScoredMarks) }) .ToList();
Maciej Los
Этот вопрос стоит 5!
У меня нет достаточно времени, чтобы держать свое внимание на нем, но это не легкая тема. Это должно быть направлено на использование очень похожего решения в качестве перечисляемого.Метод пересечения.
Я дам 5 звезд каждому, кто найдет элегантное решение SQL или Linq EF.
Примечание: выше запрос linq является мой, но описание проблемы было не так ясно, как сейчас.