1

次のクエリは、Visual Studio からは機能しません。

 var query = this.ObjectContext.Questions.Include("AnswerKey").Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == 3));

ただし、linqPad では、次を使用する必要があるように機能します。

Questions
    .Include("AnswerKey")
    .Where(o=>o.SurveyQuestions.Any(o2=>o2.SurveyID==3)).Dump();

クエリは、ロードする必要がある質問をロードしていますが、AnswerKeys の子コレクションをロードしていません。ただし、linqpad クエリは子コレクションを返します。これで一日苦労した後、私はばかげたことをしなければなりません...私のエラーが何であるか教えてください...ありがとう。

詳細を追加: Silverlight 4.0 アプリケーションで EF および RIA サービスを使用しています

DomainServiceClass の部分クラスからこのコードを実行しています

public IQueryable<Data.Questions> GetQuestionsbySurveyId(int id)
        {
            //var query = this.ObjectContext.Questions.Include("AnswerKey").Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == id));
           // var query = this.ObjectContext.Questions.Include("AnswerKey").Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == 3));
           var query= this.ObjectContext.Questions.Include("AnswerKey").Include("SurveyQuestions");

            //var query = this.ObjectContext.Questions;

            Debug.WriteLine(((ObjectQuery)query).ToTraceString());

            return query;

        }

それが本当に違いを生むかどうかはわかりません。linqpad クエリは、これと同じ EF データ コンテキストを使用しています。生成された SQL が同じであることを確認しました。クライアント側で EntityQuery として返されることは重要ですか?

private void ReceiveNewQuestionairreRequest(fnReadmitPatientList_Result request)
        {
            CurrentSelectedPatient = request;

            var context = new SurveysDomainContext();
            EntityQuery<Questions> query = context.GetQuestionsbySurveyIdQuery(3);


            context.Load(query, SurveyQuestions_Loaded, null);
            //context.Load(q, AnswerKey_Loaded, null);

        }

        private void SurveyQuestions_Loaded(LoadOperation<Questions> lo)
        {
            if (!loHasError(lo))
            {

                QuestionsCollection = new ObservableCollection<Questions>(lo.Entities);
                foreach (Questions q in QuestionsCollection)
                {
                    Debug.WriteLine(String.Format("{0} {1} - Available Answers= {2}", q.ID, q.Text, q.AnswerKey.Count()));
                }

            }

        }
4

1 に答える 1

0

私にthis.ObjectContext.Questionsは、あなたが思っていることが含まれていないように思えます。走ってみましたか

this.ObjectContext.Questions.Include("AnswerKey").Include("SurveyQuestions").ToList()

...そして、結果のリストを調べますか? それはあなたにどのように進むべきかのアイデアを与えるはずです。もちろん、部分に関しては必要な変更を加えます。.Include("SurveyQuestions")

于 2011-03-01T18:31:33.177 に答える