9

私は MVC に関する本からいくつかの LINQ の例を調べていますが、以下の select 呼び出しがどのような目的を持つのか疑問に思っています。誤植かもしれませんが、本書の正誤表には記載がありません。

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

.Select( e => e) が含まれている 2 つの例と、含まれていないコードが同じ 1 つの例をテストしました。Where は述語によってフィルター処理された IEnumerable を返すので、select 呼び出し (上記の特定の述語を使用) が必要になるのはいつでしょうか? それは実際に何かをしますか?奇妙なコーナーケースでそれはありますか?

4

3 に答える 3

11

それがない場合とまったく同じものを返しIEnumerable<T>ます。冗長な O(n) 操作 (リスト全体をループ) を実行しているため、実際には良いことよりも害を及ぼしています。

参考文献

于 2013-03-31T17:49:54.013 に答える
6

それは実際に何かをしますか?

操作全体にオーバーヘッドが追加されます。実際には、有用な目的を果たさないため、削除する必要があります。

于 2013-03-31T17:50:35.453 に答える
3

著者は、LINQ クエリが SQL ステートメントと非常によく似ていることを示したかっただけだと思います。この場合、ID 関数を使用し、省略される可能性があるため、明らかに必要ありません。selectただし、SQL で句を使用する必要があります。そこにあるのは間違いではありませんが、絶対に必要ではありません。

ただし、一般に、特にクエリが関数で返される場合は、ID 選択呼び出しを行うことが必ずしも悪いことではありません。これは、返したいコレクションの読み取り専用ビューを提供するのに役立ちます。ただし、この場合、クエリはすぐに列挙されるため、これは当てはまりません。

于 2013-03-31T17:55:50.863 に答える