Entity framework core 在服务器上使用MAX计算EF查询
使用Entity Framework Core 2.2,我有以下疑问:Entity framework core 在服务器上使用MAX计算EF查询,entity-framework-core,linq-to-entities,entity-framework-core-2.2,Entity Framework Core,Linq To Entities,Entity Framework Core 2.2,使用Entity Framework Core 2.2,我有以下疑问: var user = await context.Users.AsNoTracking() .Include(x => x.Lessons).ThenInclude(x => x.LessonLevel) .FirstOrDefaultAsync(x => x.Id == userId); var lessons = context.Lessons.AsNoTracking(); .Where
var user = await context.Users.AsNoTracking()
.Include(x => x.Lessons).ThenInclude(x => x.LessonLevel)
.FirstOrDefaultAsync(x => x.Id == userId);
var lessons = context.Lessons.AsNoTracking();
.Where(x => x.LessonLevelId < user.Lessons.Max(y => y.LessonLevelId));
如何在服务器上计算此查询
var lessons = context.Lessons.AsNoTracking();
.Where(x => x.LessonLevelId <
context.Users.AsNoTracking()
.Where(y => y.Id == userId)
.Select(y => y.Lessons.Max(z => z.LessonLevelId))
.FirstOrDefault());
更新
根据DavigG的回答,我使用以下方法使其工作:
var maxLessonLevelId = user.Lessons.Max(y => y.LessonLevelId););
var lessons = context.Lessons.AsNoTracking();
.Where(x => x.LessonLevelId < maxLessonLevelId);
var maxlesonlevelid=user.Lessons.Max(y=>y.LessonLevelId););
var lessons=context.lessons.AsNoTracking();
.其中(x=>x.LessonLevelId
我知道以下内容在本地计算,但不应该在服务器上计算
var lessons = context.Lessons.AsNoTracking();
.Where(x => x.LessonLevelId <
context.Users.AsNoTracking()
.Where(y => y.Id == userId)
.Select(y => y.Lessons.Max(z => z.LessonLevelId))
.FirstOrDefault());
var-lessons=context.lessons.AsNoTracking();
.其中(x=>x.LessonLevelId<
context.Users.AsNoTracking()
.Where(y=>y.Id==userId)
.Select(y=>y.Lessons.Max(z=>z.LessonLevelId))
.FirstOrDefault());
是否可以使用在服务器上求值的子查询?将最大值作为单独的查询获取,例如:
var lessons = context.Lessons.AsNoTracking();
.Where(x => x.LessonLevelId <
context.Users.AsNoTracking()
.Where(y => y.Id == userId)
.Select(y => y.Lessons.Max(z => z.LessonLevelId))
.FirstOrDefault());
var maxLessonLevelId = user.Lessons.Max(y => y.LessonLevelId);
然后你可以得到这样的教训:
var lessons = context.Lessons.AsNoTracking()
.Where(x => x.LessonLevelId < maxLessonLevelId);
var-lessons=context.lessons.AsNoTracking()
.其中(x=>x.LessonLevelId
您可以通过单独的查询获得最大值(即var maxlesonlevelid=user.Lessons.max(y=>y.LessonLevelId);
)我不确定是否理解您的答案。。。我想获取LessonLevelId小于所有用户课程的最大LessonLevelId的所有课程。是的,您可以在第二个查询中使用maxLessonLevelId
,而不是user.lessons.Max(y=>y.LessonLevelId)
。@MiguelMoura这是可能的,但这是另一个问题。答案就在这里。简而言之,您应该使用Max
@IvanStoev的null重载谢谢!这就解决了这个问题,无需定义maxLessonLevelId。我将检查哪一个是更好的选择。附带问题:有没有办法像我在更新时那样使用在服务器上计算的子查询?我知道我贴的那张没有。只是好奇。。。