在多个链式LINQ查询中使用一个变量

dot*_*NET 4 c# linq vb.net lambda

这是公平的在多个链式调用中使用单个lambda表达式变量吗?例如:

MyList.Where(i => i.ID > 20).OrderBy(i => i.Name);
Run Code Online (Sandbox Code Playgroud)

那么i用于Where()保持独立于i使用中OrderBy()还是会彼此产生一些隐藏的副作用,所以我必须为每个使用不同的变量?另外,你的答案也适用于VB.NET吗?

我问这个是因为我在一个稍微不同的上下文中读到我不应该直接在LINQ查询中使用foreach变量,而是在循环中创建变量的本地副本.上面的代码中是否也隐藏了一些类似的效果?

Chr*_*tos 6

他们是完全独立的.实际上,每次声明一个lambda时,你都声明了范围变量,这些变量是这个labda表达式的局部变量.因此,iWhere(i => i.ID > 20)从完全不同iOrderBy(i => i.Name).在第一种情况下i指的是随机元件MyList,然后i是指来自该序列的随机元素Where子句,这将是所有的要素的序列MyList具有一个ID>20.