2

次のエラーがあります。

        LINQ to Entities does not recognize the method 
'System.Collections.Generic.List`1 [System.Int32] get_st_past_enrollment_success()' 
method, and this method cannot be translated into a store expression.

これは、次のlinqが原因です

IEnumerable<subject> _subjects = (from subject in context.subjects
                           where 
                                subject.enrollments.Count() < subject.sj_max_enrollment
                                && subject.sj_availability == true
                                && !this.get_st_past_enrollment_success().Contains(subject.sj_subject_id)

                           select subject);

get_st_past_enrollment_success() はリストを返します:

public List<int> get_st_past_enrollment_success()
        {
            return this.enrollments.Where(e => e.em_enrolled == false && e.em_result >= 50).Select(e => e.em_subject_id).ToList();
        }

ここで何が間違っていますか?

4

1 に答える 1

1

クエリ自体にメソッド呼び出しが含まれていますが、Entity Framework はそれをどう処理するかわかりません。クエリの前にリスト フェッチを抽出してみてください。

var enrollments = get_st_past_enrollment_success();

var _subjects = from subject in context.subjects
                where subject.enrollments.Count() < subject.sj_max_enrollment
                      && subject.sj_availability
                      && !enrollments.Contains(subject.sj_subject_id)
                select subject;

また、 .NET 命名規則get_st_past_enrollment_successに違反していることにも注意してください。コードが機能するかどうかには影響しませんが、通常の規則に慣れている他の開発者には奇妙に見えます。

于 2013-05-23T01:38:46.490 に答える