Запрос Linq не заполняет дочернюю коллекцию - PullRequest
1 голос
/ 01 марта 2011

Следующий запрос не работает в 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 возвращает дочернюю коллекцию.После одного дня борьбы с этим я должен сделать что-то глупое ... пожалуйста, скажите мне, в чем моя ошибка ... спасибо.

Добавление более подробной информации: Я использую службы EF и RIA в приложении Silverlight 4.0

Я выполняю этот код из частичного класса моего 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()));
                }

            }

        }

1 Ответ

0 голосов
/ 01 марта 2011

Мне кажется, что this.ObjectContext.Questions не содержит того, что вы думаете, что оно делает. Вы пробовали запустить

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

... а потом искать в результирующем списке? Это должно дать вам представление о том, как действовать. Mutatis mutandis относительно части .Include("SurveyQuestions"), конечно.

...