为什么我的域名为dto转换器调用了两次?

时间:2011-07-13 18:22:33

标签: wcf ienumerable

我在我的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 个答案:

答案 0 :(得分:1)

LINQ方法使用延迟评估;每次迭代结果时,该方法都会再次运行。

调用ToList()强制它创建一个包含所有结果的集合,允许您迭代该集合而不重新执行任何操作。