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