Entity framework 包括/然后包括在EF核心中的位置
我需要在包含的地方使用Entity framework 包括/然后包括在EF核心中的位置,entity-framework,linq,api,asp.net-core,.net-core,Entity Framework,Linq,Api,Asp.net Core,.net Core,我需要在包含的地方使用 var templatesFields = await _context.Sections .Include(x => x.Subtitles) .ThenInclude(r => r.Fields.Where(t=>t.TemplatesFields.TemplateID==TemplateID)) .ThenInclude(r => r.OptionSources)
var templatesFields = await _context.Sections
.Include(x => x.Subtitles)
.ThenInclude(r => r.Fields.Where(t=>t.TemplatesFields.TemplateID==TemplateID))
.ThenInclude(r => r.OptionSources)
.ThenInclude(r => r.OptionsSourcesDetails)
.ToListAsync();
不能在
包含
或然后包含
中使用where条件。您可以做的是:
var templatesFields = await _context.Sections
.Include(x => x.Subtitles)
.ThenInclude(r => r.Fields)
.ThenInclude(r => r.OptionSources)
.ThenInclude(r => r.OptionsSourcesDetails)
.Where(t=>t.Subtitles.Fields.Any(x => x.TemplatesFields.TemplateID==TemplateID))
.ToListAsync();
编辑:这在.Net Core 5.0中是可能的(目前正在预览中)
来自:
不支持在Include
或IncludeThen
中进行筛选。使用选择创建投影:
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);
我已经用这种结构制定了我的代码,虽然我还没有尝试过它,因为缺少数据,但我仍然坚持使用它。谢谢我仍然在学习这个,所以在假设我是对的之前先测试一下,但我很确定这并没有达到预期的效果。字段的where子句用于减少附加到字幕的字段记录,但在提供的解决方案中,它只是删除没有Subtiutle.Fields记录的任何模板。实际上,该问题要求“给我所有模板并包含与条件匹配的字段信息”,其中提供的答案是“给我所有模板和所有字段信息,模板中有任何与条件匹配的字段”。这不是问题,这是一个功能。检查网芯5
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);