Possible purpose of LINQ select( x => x )

本文关键字:gt purpose of LINQ select Possible | 更新日期: 2023-09-27 18:06:59

我正在浏览一本关于MVC的书中的一些LINQ示例,我想知道下面的select调用可能有什么目的。也许这是一个错别字,但我在这本书的勘误表中没有看到任何提及。

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

我测试了两个例子,其中包括。select (e => e),其中一个没有,代码是相同的。既然Where返回由谓词过滤的IEnumerable,那么什么时候选择调用(上面的特定谓词)是必要的?它真的有什么用吗?会在某个奇怪的角落里发生吗?

Possible purpose of LINQ select( x => x )

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

引用

    MSDN -可枚举。选择MSDN -可枚举。其中

它实际上有什么作用吗?

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

我认为作者只是想说明LINQ查询与SQL语句非常相似。在这种情况下,显然不需要它,因为它使用了恒等函数,可以省略。然而,在SQL中必须有select子句。把它放在那里没有错,但绝对没有必要。

虽然一般来说,使用标识选择调用并不总是一件坏事,特别是当查询在函数中返回时。这可以帮助您获得想要返回的集合的只读视图。但这并不适用于这种情况,因为查询是立即枚举的