9 c# linq entity-framework entity-framework-core asp.net-core
我有3个实体:
Questionnaire.cs:
public class Questionnaire
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Question> Questions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Question.cs:
public class Question
{
public int Id { get; set; }
public string Text { get; set; }
public ICollection<Answer> Answers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并且Answer.cs:
public class Answer
{
public int Id { get; set; }
public string UserId { get; set; }
public string TextAnswer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我用答案保存了调查问卷,但现在我想找回问题及其答案的过滤问卷.所以我为此写了linq,但它给我一个错误,有什么我做错了吗?这是一个例子:
questionnaire = _context.Questionnaires.Include(qn => qn.Questions)
.ThenInclude(question => question.Answers.Where(a => a.UserId == userId))
.FirstOrDefault(qn => qn.Id == questionnaireId);
Run Code Online (Sandbox Code Playgroud)
而且我得到了
Message ="属性表达式'q => {来自q.Answers中的答案a,其中Equals([a] .UserId,__ userId_0)选择[a]}'无效.表达式应代表属性访问:'t = > t.MyProperty'.
任何想法如何解决这个问题?
Paw*_*aga 10
过滤Include或IncludeThen不受支持.使用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);
Run Code Online (Sandbox Code Playgroud)
关于这个问题有一个github问题:https://github.com/aspnet/EntityFramework/issues/3474
| 归档时间: |
|
| 查看次数: |
5572 次 |
| 最近记录: |