linq фильтрует дочернюю коллекцию - PullRequest
3 голосов
/ 01 июня 2011

Я перечитал кучу разных тем на эту тему, но я не нашел того, что искал.

У меня есть запрос EF:

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

Это работало нормально, пока я не понял, что не принимаю во внимание мой Активный Флаг для дочерней коллекции AnswerKey. Другими словами, этот запрос должен загружать все вопросы, для которых родительский опросный номер равен 3 (что он и делает), но загружать только answerKeys с активным флагом true.

Я пробовал это:

var query = this.ObjectContext.AnswerKey
                .Include("Questions.QuestionTypes")
                .Where(ak =>
                    ak.Active == true &&
                    ak.Questions.SurveyQuestions.Any(sq => sq.SurveyID == 3) &&
                    ak.Questions.Active == true)
                    .AsEnumerable()
                    .Select(ak => ak.Questions).AsQueryable();

Но он возвращает 1 вопрос для каждого ключа ответа. Поэтому, если у вопроса 4 ответа, он появляется 4 раза ...

Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Вы можете просто использовать Distinct() в конце, чтобы отфильтровать дубликаты:

  .AsEnumerable()
  .Select(ak => ak.Questions)
  .Distinct()
  .AsQueryable();
1 голос
/ 01 июня 2011

Brokenglass Я попробую ваше предложение. И дать вам кредит, если он работает ..

Я также нашел это здесь после перехода по другой ссылке на SO ... и это тоже работает, но мне нужно проверить это в моем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...