查找共同项目在本地进行评估

使用Entity Framework Core 2.2,我有以下查询:

JavascriptExecutor

我希望获得包含所有课程技能的用户技能。

运行此查询时,出现以下错误:

JavascriptExecutor jse= (JavascriptExecutor) driver; 
jse.executeScript("arguments[0].click();",senior);

如何更改查询以解决此问题?

更新

我需要使用一个附加选项(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.'.
johnnysydney 回答:查找共同项目在本地进行评估

userSkills是内存中的集合,根据我对EF6和EF Core的经验,到目前为止,我可以说,带有内存中集合的唯一可靠的可翻译构造是Enumerable.Contains中原始类型的方法存储集合。

所以下面解决的问题就是问题。

首先(应在查询表达式树之外):

var userSkillIds = user.UserSkills.Select(x => x.SkillId);

然后代替

.Where(x => x.LessonSkills.All(y => userSkills.Any(z => y.SkillId == z.SkillId)))

使用等效项(但可翻译):

.Where(x => x.LessonSkills.All(y => userSkillIds.Contains(y.SkillId)))

更新:如果您不能使用Contains,则在EF Core开始支持之前,您可以使用的选项是(1)EntityFrameworkCore.MemoryJoin软件包(我个人还没有对其进行了测试,但是这个想法很有趣),(2)使用Or类手动构建基于Expression的谓词(很难并且适用于小型内存集合),并且(3)用真实的{{ 1}},例如

IQueryable<>

并使用原始查询。

本文链接:https://www.f2er.com/3157847.html

大家都在问