ArfatM Ответов: 0

Запрос 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 является мой, но описание проблемы было не так ясно, как сейчас.

0 Ответов