0

私は長いSQLクエリを実行しようとしています:

IEnumerable<erequest> blah = db.Database.SqlQuery<erequest>().ToList();

便宜上、クエリを以下に表示します。クエリを実行すると、次のエラーが発生します。

データ リーダーは、指定された ' ' と互換性がありませんenrollDBModel.erequest。タイプ ' er_student_id' のメンバーには、データ リーダーに同じ名前の対応する列がありません。

ただし、er_student_idメンバーは erequest.cs Context.tt クラスに存在します。

public int er_student_id { get; set; }

(完全なクラスについては、投稿の下部も参照してください)

クエリ:

SELECT erequests.er_id, 
       CASE 
         WHEN current_subject_enrollment.count >= subjects.sj_max_enrollment 
       THEN 0 
         WHEN already_passed.count >= 1 THEN 0 
         WHEN is_already_enrolled.count >= 1 THEN 0 
         WHEN failure_times.count >= 3 THEN 0 
         WHEN current_student_enrollment.count >= 4 THEN 0 
         ELSE 1 
       END AS can_enroll, 
       students.st_first_name, 
       students.st_mid_name, 
       students.st_last_name, 
       students.st_student_id, 
       subjects.sj_subject_name, 
       subjects.sj_availability, 
       subjects.sj_max_enrollment, 
       erequests.er_subject_id, 
       erequests.er_reason, 
       erequests.er_status 
FROM   erequests 
       RIGHT JOIN students 
               ON erequests.er_student_id = students.st_student_id 
       RIGHT JOIN subjects 
               ON erequests.er_subject_id = subjects.sj_subject_id 
                  AND subjects.sj_availability = 1 
       LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
                               em_subject_id 
                        FROM   enrollment 
                        WHERE  ( em_enrolled = 1 ) 
                        GROUP  BY em_subject_id) AS current_subject_enrollment 
                    ON erequests.er_subject_id = 
                       current_subject_enrollment.em_subject_id 
       LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
                               em_student_id, 
                               em_subject_id 
                        FROM   enrollment 
                        WHERE  ( em_enrolled = 1 ) 
                        GROUP  BY em_student_id, 
                                  em_subject_id) AS is_already_enrolled 
                    ON erequests.er_student_id = 
                       is_already_enrolled.em_student_id 
                       AND erequests.er_subject_id = 
                           is_already_enrolled.em_subject_id 
       LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
                               em_student_id, 
                               em_subject_id 
                        FROM   enrollment 
                        WHERE  ( em_enrolled = 0 
                                 AND em_result >= 50 ) 
                        GROUP  BY em_student_id, 
                                  em_subject_id) AS already_passed 
                    ON erequests.er_subject_id = already_passed.em_subject_id 
                       AND erequests.er_subject_id = 
                           already_passed.em_subject_id 
       LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
                               em_student_id, 
                               em_subject_id 
                        FROM   enrollment 
                        WHERE  ( em_enrolled = 0 
                                 AND em_result < 50 ) 
                        GROUP  BY em_student_id, 
                                  em_subject_id) AS failure_times 
                    ON erequests.er_subject_id = failure_times.em_subject_id 
                       AND erequests.er_subject_id = failure_times.em_subject_id 
       LEFT OUTER JOIN (SELECT Count(em_subject_id) AS count, 
                               em_student_id 
                        FROM   enrollment 
                        WHERE  ( em_enrolled = 1 ) 
                        GROUP  BY em_student_id) AS current_student_enrollment 
                    ON erequests.er_student_id = 
                       current_student_enrollment.em_student_id 
WHERE  ( subjects.sj_availability = 1 ) 
       AND ( erequests.er_status NOT IN ( 'A', 'D' ) ) 

erequest.cs:

public partial class erequest
{
    public int er_id { get; set; }

    public int can_enroll { get; set; }

    [Required]
    [Range(1, 100000)]
    [Display(Name = "Subject Id: ")]
    public int er_subject_id { get; set; }

    [Required]
    [Range(1, 100000)]
    [Display(Name = "Student Id: ")]
    public int er_student_id { get; set; }

    [Required]
    [Display(Name = "Reason: ")]
    public string er_reason { get; set; }

    [Required]
    [Display(Name = "Status: ")]
    public string er_status { get; set; }

    public virtual student student { get; set; }
    public virtual subject subject { get; set; }

    public IEnumerable<erequest> processedErequests { get; set; }

    public IEnumerable<erequest> unprocessedErequests { get; set; }
}
4

1 に答える 1