我用IQueryable<T>
on 进行查询Entity.DbSet
。当我插入这行代码时:
query =
query.Where(x => x.VersionInt == query.Max(y => y.VersionInt))
当我用这一行编译和运行时,整个 IIS 崩溃了。如果我删除它一切都好。发生了什么?
我用IQueryable<T>
on 进行查询Entity.DbSet
。当我插入这行代码时:
query =
query.Where(x => x.VersionInt == query.Max(y => y.VersionInt))
当我用这一行编译和运行时,整个 IIS 崩溃了。如果我删除它一切都好。发生了什么?
堆栈溢出异常(这将使进程崩溃 - 您无法捕获 StackOverflowException)!
Linq 是惰性求值的。因此,您的查询正在查询自己。
你的意思是
var querycopy = query;
query = query.Where(x => x.VersionInt == querycopy.Max(y => y.VersionInt))
或者正如 oerkelens 所建议的那样,将“Max”评估放在 Where 之外会更加高效。
只需在查询之前先找到 max(VersionInt)
var maxVersion = query.Max(x => x.VersionInt);
query = query.Where(x => x.VersionInt == maxVersion);