Ho 3 entità:
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; }
}
e Answer.cs
:
public class Answer
{
public int Id { get; set; }
public string UserId { get; set; }
public string TextAnswer { get; set; }
}
Così ho salvato il questionario con le risposte, ma ora voglio recuperare il questionario filtrato con domande e le sue risposte. Quindi ho scritto linq per questo, ma mi fa un errore, c'è qualcosa che faccio di sbagliato? ecco l'esempio:
questionnaire = _context.Questionnaires.Include(qn => qn.Questions)
.ThenInclude(question => question.Answers.Where(a => a.UserId == userId))
.FirstOrDefault(qn => qn.Id == questionnaireId);
E sto ricevendo
Message = "L'espressione di proprietà 'q => {da Answer a in q.Risponde a dove Equals ([a] .UserId, __userId_0) select [a]}' non è valido. L'espressione dovrebbe rappresentare un accesso di proprietà: 't = > t.MyProperty '.
Qualche idea su come risolvere questo problema?
Filtraggio in Include
o IncludeThen
non è supportato. Crea proiezione utilizzando 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);
C'è un problema github su questo problema: https://github.com/aspnet/EntityFramework/issues/3474