0

我用IQueryable<T>on 进行查询Entity.DbSet。当我插入这行代码时:

query = 
     query.Where(x => x.VersionInt == query.Max(y => y.VersionInt))

当我用这一行编译和运行时,整个 IIS 崩溃了。如果我删除它一切都好。发生了什么?

4

2 回答 2

2

堆栈溢出异常(这将使进程崩溃 - 您无法捕获 StackOverflowException)!

Linq 是惰性求值的。因此,您的查询正在查询自己。

你的意思是

var querycopy = query;
query = query.Where(x => x.VersionInt == querycopy.Max(y => y.VersionInt))

或者正如 oerkelens 所建议的那样,将“Max”评估放在 Where 之外会更加高效。

于 2013-11-13T13:05:23.383 回答
2

只需在查询之前先找到 max(VersionInt)

var maxVersion = query.Max(x => x.VersionInt);
query = query.Where(x => x.VersionInt == maxVersion);
于 2013-11-13T13:09:06.740 回答