私は長い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; }
}