ecathell
ecathell

Reputation: 1030

linq filtering child collection

I have read over a bunch of different topics on this, but i havent found what I am looking for.

I have an EF query that is this:

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

This was working fine until i realized that i was not taking into account my Active Flag for the AnswerKey child collection. In other words, this query should load all questions that have a parent surveyid of 3(which it does)but only load AnswerKeys that have an active flag of true.

I have tried this:

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();

But it returns 1 question for each answerkey. So if a question has 4 answer it shows up 4 times...

How can i do this?

Upvotes: 3

Views: 2750

Answers (2)

ecathell
ecathell

Reputation: 1030

Brokenglass I will try your suggestion. And give you the credit if it works..

I also found this here after following another link on SO... and this appears to work as well but i need to verify it in my app.

Upvotes: 1

BrokenGlass
BrokenGlass

Reputation: 160852

You could just use Distinct() at the end to filter out the duplicates:

  .AsEnumerable()
  .Select(ak => ak.Questions)
  .Distinct()
  .AsQueryable();

Upvotes: 2

Related Questions