2

Linqメソッドを呼び出す必要がある順序で表示または説明される概要はどこかにありますか?

たとえば、最初に呼び出してから。を呼び出すTake(200)と、例外が発生しますOrderBy(..)。ただし、これらの呼び出しを切り替えても例外は発生しません。

だから私の質問は、誰かがこれが説明されているいくつかのドキュメントを知っていますか?または、この種の情報がリストされている場所を知っていますか?

4

2 に答える 2

2

呼び出すことができる順序に制限はありません。LINQで呼び出してから呼び出すことは完全に有効Take(200)ですOrderBy。LINQは一連のメソッドにすぎません。これらのメソッドが実際にどのように実装されるかについては説明していません。IQueryable実際の実装には、Linq-to-objects(少し特殊なケース)、LINQ-To-SQL、Entity Framework、およびLINQメソッド に基づくその他のクエリプロバイダーが含まれます。

一部の特定のプロバイダーは、LINQメソッドのサブセットのみをサポートする場合もあれば、LINQが記述できる他の側面をサポートしない場合もあります。そのような場合、エラーが発生する可能性があります(またはその他の望ましくない動作をします)。使用している特定のLINQプロバイダーのドキュメントを調べて、それが何をサポートし、何をサポートしていないかを確認する必要があります。

于 2012-09-14T14:02:35.007 に答える
2

OrderByを呼び出す前にTake(200)を呼び出せない理由は、Take(200)がNHibernateLINQプロバイダーにlinqクエリの評価を強制するためです。クエリが評価されると、クエリを再評価せずにSQL句をミックスに追加することはできません。これは、意図しない結果をもたらす可能性があります。

于 2012-09-14T14:06:54.577 に答える