实体框架-linq过滤子集合



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

我有一个EF查询是这样的:

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

这一直很好,直到我意识到我没有考虑AnswerKey子集合的活动标志。换句话说,此查询应该加载父调查ID为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();

但它为每个答案返回一个问题。因此,如果一个问题有4个答案,它会出现4次。。。

我该怎么做?

您可以在末尾使用Distinct()来过滤重复项:

  .AsEnumerable()
  .Select(ak => ak.Questions)
  .Distinct()
  .AsQueryable();
Brokenglass我会试试你的建议。如果它有效的话,就给你信用。。

我在SO上关注另一个链接后也在这里发现了这一点……这似乎也有效,但我需要在我的应用程序中验证它。

相关内容

  • 没有找到相关文章