LINQ查询重用和延迟执行

You*_*ngs 1 c# linq linq-to-objects

我的印象是我可以创建一个LINQ查询,然后在更改所涉及的参数时重复使用它.但似乎你无法改变源集合.有人可以给我一个很好的解释,为什么,因为我明显误解了一些基本的东西.

这是一些示例代码.

var source = Enumerable.Range(1, 10);
var value = source.Where(x => x > 5);
var first = value.ToArray();

source = Enumerable.Range(11, 20);
var second = value.ToArray();
Run Code Online (Sandbox Code Playgroud)

我期待第一个是6,7,8,9,10,第二个是11到20.

Ken*_*rey 6

当你这样做时:

source = Enumerable.Range(11, 20);
Run Code Online (Sandbox Code Playgroud)

您正在创建一个新对象.但是,Where查询仍然具有对旧对象的引用.