这是一个延迟执行(Deferred excution)的问题。当调用where时,实际得到的不是集合,而是运算表达式,直到ToList时,他才成为对应的集合。在你的循环中,运算式中的变量值发生了变化(category),等同于如下代码,所以 levellist1 levellist2在执行时运算了相同的结果。