我在我的wcf服务中列出了一个奇怪的行为。这是我的opreation合同实施:
public IEnumerable<Dto.ProductType> GetAllProductTypes()
{
return m_InventoryRepository.GetAllProductTypes().Select(DomainToDtoConverter.ConvertToDto);
}
如果我说3000种产品类型,那么我应该期望我的域到dto转换器被调用3000次。但这种情况并非如此;它被称为6000次。如果我确保在我返回之前加载所有项目:
...Select(DomainToDtoConverter.ConvertToDto).ToList();
...然后转换器被称为我期望的3000倍。
任何人都知道为什么会这样吗?
我想我们将更改所有操作契约以返回数组而不是IEnumerable
答案 0 :(得分:1)
LINQ方法使用延迟评估;每次迭代结果时,该方法都会再次运行。
调用ToList()
强制它创建一个包含所有结果的集合,允许您迭代该集合而不重新执行任何操作。