2011-07-13 31 views
0

我在我的wcf服務中加入了一個奇怪的行爲。這是我的opreation合同執行:爲什麼我的域名轉換器調用了兩次?

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兩次。現場發生了什麼? – Michael

+0

這是序列的兩倍。您可以在該方法中放置一個斷點並查看callstack以查找位置。 – SLaks

相關問題