我有两张表如下:
ScholarSubject
ScholarSubjectID<pk>
ScholarID
SubjectID
Mark
和
AdmissionReq
SubjectID
DegreeCode
MinumumMark
我试图从Degree表(PK degreeID)返回所有内容,其中学者的标记小于录取的最小标记。我的查询如下:
public List<object> getDegreeByAPSandRequirements()
{
using (DataLayer.CareerDatabaseEntities context = new DataLayer.CareerDatabaseEntities())
{
return (from Degrees in context.Degrees
join admissions in context.AdmissionReqs on
Degrees.DegreeCode equals admissions.DegreeCode
join subject in context.Subjects on
admissions.SubjectID equals subject.SubjectID
join scholarsubject in context.ScholarSubjects on
subject.SubjectID equals scholarsubject.SubjectID
join scholar in context.Scholars on
scholarsubject.ScholarID equals scholar.ScholarID
where Degrees.APSScore <= scholar.APSScore && admissions.MinimumMark <= scholarsubject.NSC && scholarsubject.SubjectID.Equals(admissions.SubjectID)
select Degrees).Distinct().ToList<object>();
}
}
一切正常,除非我将其中一个标记(在ScholarSubject中)更改为比最小标记(在AdmissionsReq中)更小的值,然后它仍然返回一个度数。如果两个标记都大于最低要求而不仅仅是其中一个标记,我想要返回学位。
我做错了什么?有人可以帮帮我吗?
答案 0 :(得分:0)
我仍然不确定我是否理解你要做的事情 - 除非你的数据库中只有一位学者,否则我会回复所有学者所取得的所有学位的清单。如果您不想这样做,则需要在where
子句中过滤scholarID。
但无论如何 - 为了获得更多信息,我会尝试做两件事。
我会更改您的查询并使用scholar
而不是degree
启动它,因为这可能会避免一些重复:
from scholar in context.Scholars
join scholarsubject in context.ScholarSubjects on scholar.ScholarID equals scholarsubject.ScholarID
join subject in context.Subjects on scholarsubject.SubjectID equals subject.SubjectID
join admission in context.AdmissionReqs on subject.SubjectID equals admission.SubjectID
join degree in context.Degrees on admission.DegreeCode equals degree.DegreeCode
where degree.APSScore <= scholar.APSScore
&& admission.MinimumMark <= scholarsubject.NSC
//&& scholarsubject.SubjectID.Equals(admission.SubjectID) // you should not need this line as you have the joins in place to assert this
select degree)
.Distinct()
.ToList<object>();
如果这会产生与您之前查询相同的结果,那么我将更改返回类型以查看您到底获得了什么 - 用此替换最后一行并检查集合:
select new {ScholarID = scholar.ScholarID, Degree = degree})
.Distinct()
.ToList();