2011-07-13 22 views
0

私のwcfサービスで奇妙な動作が発生しました。これは私のopreation契約の実装です:ドメインがdtoコンバータに2回呼び出されるのはなぜですか?

public IEnumerable<Dto.ProductType> GetAllProductTypes() 
{ 
    return m_InventoryRepository.GetAllProductTypes().Select(DomainToDtoConverter.ConvertToDto); 
} 

私が聞かせている場合は3000の製品の種類は、私はDTOコンバータへの私のドメインが3000回と呼ばれることを期待すべきである、と言います。しかし、これは事実ではありません。 6000回と呼ばれます。

...Select(DomainToDtoConverter.ConvertToDto).ToList(); 

...私が期待している3000回の変換は、私がすべてのアイテムをロードする前に確認してください。これがなぜ起こるか

誰もが知っていますか?

は、私たちが代わりにIEnumerableをの配列を返すために私たちのすべての操作の契約を変更します推測

答えて

1

LINQメソッドは遅延評価を使用します。結果を反復処理するたびにメソッドが再度実行されます。それはあなたが再実行何もせずにそのコレクションを反復処理することができ、結果のすべてを含むコレクションを作成するにはToList()力を呼び出す

+0

ええ、wcfが私のIEnumerableを2回解決する理由は分かりません。シーンの後ろで何が起こるのですか? – Michael

+0

これは、シーケンスを2回繰り返します。メソッドにブレークポイントを設定し、コールスタックを見てどこを見つけることができます。 – SLaks

関連する問題