【发布时间】:2019-11-06 03:42:54
【问题描述】:
使用 Entity Framework Core 2.2 我有以下查询:
IQueryable<User> users = _context.Users.AsNoTracking();
User user = await users
.Include(x => x.UserSkills)
.ThenInclude(x => x.Skill)
.FirstOrDefaultAsync(x => x.Id == 1);
var userSkills = user.UserSkills.ToList();
IQueryable<Lesson> lessons = _context.Lessons.AsNoTracking();
var test = lessons
.Where(x => x.IsEnabled)
.Where(x => x.LessonSkills.All(y => userSkills.Any(z => y.SkillId == z.SkillId)))
.ToList();
我正在寻找包含所有课程技能的用户技能。
当我运行此查询时,我收到以下错误:
Exception thrown: 'System.InvalidOperationException' in System.Private.CoreLib.dll:
'Error generated for warning 'Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning:
The LINQ expression 'where ([y].SkillId == [z].SkillId)' could not be translated and will be evaluated locally.'.
如何改变查询来解决这个问题?
更新
我需要用一个额外的选项来扩展这个查询 (y.SkillLevelId <= z.SkillLevelId):
var test = lessons
.Where(x => x.IsEnabled)
.Where(x => x.LessonSkills.All(y => userSkills.Any(z =>
y.SkillId == z.SkillId
&&
y.SkillLevelId <= z.SkillLevelId)))
.ToList();
【问题讨论】:
-
没有。错误“无法翻译并将在本地评估”是每次 Linq 查询无法转换为 SQL 时发出的一般错误。您发布的问题与我的问题不同。错误可能相同,但导致错误的原因不同。
标签: c# entity-framework-core entity-framework-core-2.2