Почему мой домен в dto конвертер вызывается дважды? - PullRequest
0 голосов
/ 13 июля 2011

Я включил странное поведение в мой сервис wcf.Это мой контракт на реализацию:

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

Если я скажу 3000 типов продуктов, то я должен ожидать, что конвертер моего домена в dto будет вызываться 3000 раз.Но это не так;это называется 6000 раз.Если я тогда гарантирую, что я загружаю все элементы, прежде чем я вернусь, как это:

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

... тогда конвертер будет вызываться в 3000 раз больше, чем я ожидал.

Кто-нибудь знает, почему это происходит?

Я предполагаю, что мы изменим все наши контракты операций, чтобы вернуть массив вместо IEnumerable

1 Ответ

1 голос
/ 13 июля 2011

LINQ методы используют ленивую оценку; метод запускается снова каждый раз, когда вы повторяете результаты.

Вызов ToList() заставляет его создать коллекцию, содержащую все результаты, что позволяет вам повторять эту коллекцию без повторного выполнения чего-либо.

...