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

时间:2013-03-31 17:47:58

标签: c# linq

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

foreach( Product p in products
    .Where( e => e.Name == productParam.Name )
    .Select( e => e ) ) {
        p.Price = productParam.Price;
}

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

3 个答案:

答案 0 :(得分:9)

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

<强>参考

答案 1 :(得分:5)

  

它确实做了什么吗?

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

答案 2 :(得分:3)

我认为作者只想表明LINQ查询与SQL语句非常相似。在这种情况下,它显然不需要,因为它使用身份功能并且可以省略。但是,要求在SQL中使用select子句。把它放在那里并没有错,但绝对不需要它。

虽然一般来说,拥有一个身份选择调用并不总是坏事,特别是如果在函数中返回查询。这有助于为您提供要返回的集合的只读视图。但在这种情况下,这并不适用,因为查询是立即枚举的。