LINQ过滤子集合

3
我已经阅读了很多不同的主题,但我没有找到我想要的。我有一个EF查询,它是这样的:
var query = this.ObjectContext.Questions
            .Include("AnswerKey").Include("QuestionTypes")
            .Where(o => o.SurveyQuestions.Any(o2 => o2.SurveyID == id));

这个在我意识到没有考虑AnswerKey子集合的Active标志时还是正常工作的。换句话说,这个查询应该加载所有父调查id为3的问题(它确实这样做了),但只加载Active标志为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个回答

2
你可以在末尾使用Distinct()来过滤重复项:
  .AsEnumerable()
  .Select(ak => ak.Questions)
  .Distinct()
  .AsQueryable();

1

Brokenglass,我会尝试你的建议。如果有效果,我会给你功劳。

在 Stack Overflow 上跟着另一个链接,我也发现了这个方法……看起来也行,但我需要在我的应用程序中验证一下。


1
你应该采用你发布的链接提供的解决方案,这将更有效,因为你只会实体化确实需要的实体。 - BrokenGlass
我认为你的代码同样有效。同一作者在此处还发布了一个类似的示例https://dev59.com/-XI_5IYBdhLWcg3wEe1u#1535618。 - ecathell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接