如何向ThenInclude添加where子句
我有3个实体:
Questionnaire.cs
:
public class Questionnaire { public int Id { get; set; } public string Name { get; set; } public ICollection Questions { get; set; } }
Question.cs
:
public class Question { public int Id { get; set; } public string Text { get; set; } public ICollection Answers { get; set; } }
和Answer.cs
:
public class Answer { public int Id { get; set; } public string UserId { get; set; } public string TextAnswer { get; set; } }
所以我用答案保存了调查问卷,但现在我想找回问题及其答案的过滤问卷。 所以我写了linq,但它给我一个错误,有什么我做错了吗? 这是一个例子:
questionnaire = _context.Questionnaires.Include(qn => qn.Questions) .ThenInclude(question => question.Answers.Where(a => a.UserId == userId)) .FirstOrDefault(qn => qn.Id == questionnaireId);
我正在接受
Message =“属性表达式’q => {来自q.Answers中的答案a,其中Equals([a] .UserId,__ userId_0)选择[a]}’无效。表达式应代表属性访问:’t = > t.MyProperty’。
任何想法如何解决这个问题?
不支持在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);
关于这个问题有一个github问题: https : //github.com/aspnet/EntityFramework/issues/3474
我认为你需要在你的答案中有一个问题的导航属性,因为答案应该有一个问题ID。 你已经有了这个FK,你只需要一个导航属性
你的模型类看起来像这样
public class Answer { public int Id { get; set; } public string UserId { get; set; } public string TextAnswer { get; set; } // added in model public Question Question { get; set; } }
和这样的查询
var answers = ctx.Answers.Include(q=>q.Question).Where(a =>a.UserId=="1").ToList();
- 如何在ASP.NET Core 1.0中配置身份validation
- 如何在ASP.NET Core中处理多值cookie?
- 尝试激活’AuthController’时无法解析类型’Microsoft.AspNetCore.Identity.UserManager`的服务
- 在IServiceCollection扩展中获取服务
- 在.net core 2.0中缓存声明
- 如何在移动应用程序上进行身份validation后在.NET Core服务器上登录用户
- 如何在.NET Core中对Startup.cs进行unit testing
- 如何在ASP.NET Core Web Api中完成版本控制
- Razor类库是否也可以打包静态文件(js,css等)?