次のクエリは、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()));
}
}
}