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 回答