描述
我有三张table。
学生
| 识别码|名称名称名称|
| - -|- -|
| 一个|美国汽车协会|
| 2个|血脑屏障|
| 三个|CCC认证|
| 四个|限定日|
技能
| 识别码|名称名称名称|
| - -|- -|
| 一个|JS系统|
| 2个|C#语言|
| 三个|Angular |
| 四个|React|
| 五个|jQuery查询|
| 六个|技术支持|
| 七个|F编号|
学员技能
| 识别码|学生ID|技能ID|
| - -|- -|- -|
| 一个|一个|一个|
| 2个|一个|2个|
| 三个|2个|一个|
| 四个|2个|2个|
| 五个|2个|四个|
| 六个|三个|三个|
| 七个|四个|三个|
| 八个|四个|五个|
| 九个|四个|六个|
| 10个|四个|七个|
我尝试从该表中根据学员注册的课程(技能)获取学员的详细信息。假设必修课程为1,2,3,则结果应为。
- 学生ID1,2,3,4
1 (因为他/她匹配技能1,2)
2 (因为他/她匹配技能1,2)
3 (因为匹配技能3)
4 (因为他/她匹配技能3)
- 学员的顺序应为2、1、4、3。
2 (由于符合必学技能1,2,且多一项技能,优先级高于学号1)
1 (因为他/她匹配所需技能1,2)
4 (由于他/她匹配了必需技能3,并且有额外的三个技能,所以优先级高于StudentID 3)
3 (因为他/她匹配所需技能3)
我所尝试的
var requiredSkillIds = new List<int>() { 1, 2, 3 }; // Required Skills.
var studentIds= (await _studentSkill.GetByAsync(x => requiredSkillIds.Contains(x.skillId))).Select(x => x.StudentID).ToList();
var result = await _dbContext.Students.Where(x => studentIds.Contains(x.Id).Include(x =>x.StudentSkills).OrderByDescending(x =>x.StudentSkills.Count).ToListAsync();
问题是,我得到的结果,但排序是在学生的总技能计数。
所以,排序后的结果是有ID的学生。
四、二、一、三
我怎样才能实现我上面提到的排序。
1条答案
按热度按时间yqyhoc1h1#
你只计算了学生的技能数量,而没有考虑他们所需要的技能数量。你可能需要使用linq to objects,但是要添加这个子句: