0

次のように2つのテーブルがあります。

 ScholarSubject
ScholarSubjectID<pk>
ScholarID
SubjectID
Mark

 AdmissionReq
SubjectID
DegreeCode
MinumumMark

奨学生の点数が入学の最低点未満である学位テーブル (PK 学位 ID を含む) からすべてを返そうとしています。私のクエリは次のとおりです。

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 の) マークの 1 つを (AdmissionsReq の) 最小マークよりも小さい値に変更した場合を除いて、すべてが機能します。1 つのマークだけでなく、両方のマークが最小要件を上回っている場合、学位を返したいと考えています。

私は何を間違っていますか?誰かが私を助けてくれませんか??

4

1 に答える 1

0

あなたが何をしようとしているのか、まだよくわかりません。データベースに学者が 1 人しかいない場合を除き、すべての学者が取得したすべての学位のリストを返すように思えます。これを望まない場合は、where句で ScholarID をフィルタリングする必要があります。

とにかく、より多くの情報を得るために、私は 2 つのことを試みます。

  1. 重複を避けるために、クエリを変更して、scholarnot で開始します。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();
    
于 2012-05-21T19:18:23.727 に答える