linq过滤儿童集合

时间:2011-06-01 17:18:08

标签: linq entity-framework linq-to-entities

我已经阅读了很多不同的主题,但我还没找到我要找的东西。

我有一个EF查询:

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

这个工作正常,直到我意识到我没有考虑AnswerKey儿童系列的Active Flag。换句话说,此查询应该加载所有父调查项为3的问题(它确实如此),但只加载具有活动标志为true的AnswerKeys。

我试过这个:

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 个答案:

答案 0 :(得分:2)

您最后可以使用Distinct()来过滤重复项:

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

答案 1 :(得分:1)

Brokenglass我会尝试你的建议。如果有效,请给你信用..

I also found this here之后关注SO上的其他链接......这看起来也有效,但我需要在我的应用中验证它。