本文介绍了如何将 where 子句添加到 ThenInclude的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 3 个实体:

Questionnaire.cs:

public class Questionnaire
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<Question> Questions { get; set; }
}

Question.cs:

public class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public ICollection<Answer> Answers { get; set; }
}

Answer.cs:

public class Answer
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public string TextAnswer { get; set; }
}

所以我保存了带有答案的问卷,但现在我想检索带有问题及其答案的过滤问卷.所以我为此写了 linq,但它给我一个错误,我做错了什么吗?这是示例:

So I saved the questionnaire with answers but now i want to retrieve filtered questionnaire with questions and its answers. So i wrote linq for that, but it throws me an error, is there anything i do wrong? here is the example:

questionnaire = _context.Questionnaires.Include(qn => qn.Questions)
.ThenInclude(question => question.Answers.Where(a => a.UserId == userId))
.FirstOrDefault(qn => qn.Id == questionnaireId);

我得到了

Message = "属性表达式 'q => {from Answer a in q.Answers其中 Equals([a].UserId, __userId_0) select [a]}' 无效.这表达式应该代表一个属性访问:'t => t.MyProperty'.

任何想法如何解决这个问题?

Any ideas how to solve this problem?

推荐答案

不支持在 IncludeThenInclude 中进行过滤.使用 Select 创建投影:

Filtering in Include or ThenInclude is not supported. Create projection by using Select:

questionnaire = _context.Questionnaires
    .Select(n => new Questionnaire
    {
        Id = n.Id,
        Name = n.Name,
        Questions = n.Questions.Select(q => new Question
        {
           Id = q.Id,
           Text = q.Text,
           Answers = q.Where(a => a.UserId == userId).ToList()
        }).ToList()
    })
    .FirstOrDefault(qn => qn.Id == questionnaireId);

有一个关于这个问题的github issue:https://github.com/aspnet/EntityFramework/issues/3474

There is a github issue about this problem: https://github.com/aspnet/EntityFramework/issues/3474

这篇关于如何将 where 子句添加到 ThenInclude的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-24 15:34