使用where子句返回值

时间:2012-05-21 13:51:22

标签: linq where

我有两张表如下:

 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中)更小的值,然后它仍然返回一个度数。如果两个标记都大于最低要求而不仅仅是其中一个标记,我想要返回学位。

我做错了什么?有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我仍然不确定我是否理解你要做的事情 - 除非你的数据库中只有一位学者,否则我会回复所有学者所取得的所有学位的清单。如果您不想这样做,则需要在where子句中过滤scholarID。

但无论如何 - 为了获得更多信息,我会尝试做两件事。

  1. 我会更改您的查询并使用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>();
    
  2. 如果这会产生与您之前查询相同的结果,那么我将更改返回类型以查看您到底获得了什么 - 用此替换最后一行并检查集合:

     select new {ScholarID = scholar.ScholarID, Degree = degree})
       .Distinct()
       .ToList();