LINQ select的可能目的(x => x)

sea*_*ght 9 c# linq

我正在阅读一本关于MVC的书中的一些LINQ示例,我想知道下面的选择调用有什么用途.也许这是一个错字,但我在书的勘误表中没有看到任何提及它.

foreach( Product p in products
    .Where( e => e.Name == productParam.Name )
    .Select( e => e ) ) {
        p.Price = productParam.Price;
}
Run Code Online (Sandbox Code Playgroud)

我测试了两个这样的例子,其中包括.Select(e => e)和一个不包含的内容,代码是相同的.由于Where返回由谓词过滤的IEnumerable,那么何时需要select调用(具有上面的特定谓词)?它真的做了什么吗?它可以在一些奇怪的角落里吗?

Dan*_*mms 10

如果没有它,它将返回完全相同的东西,a IEnumerable<T>.它实际上弊大于利,因为它正在执行冗余的O(n)操作(循环遍历整个列表).

参考

  • @DanielImms IQueryable提供者通常不会调用lambda(根本不是!它甚至不可执行.它是一个`Expression`).他们转换为SQL. (2认同)

Ree*_*sey 6

它真的做了什么吗?

它确实增加了整个操作的开销.实际上,它应该被删除,因为它没有用处.