Как заставить мои лямбда-выражения оценивать раньше? Устранить странность лямбда-выражения?

Я написал следующий код C #:

_locationsByRegion = new Dictionary<string, IEnumerable<string>>();
foreach (string regionId in regionIds)
{
    IEnumerable<string> locationIds = Locations
        .Where(location => location.regionId.ToUpper() == regionId.ToUpper())
        .Select(location => location.LocationId); //If I cast to an array here, it works.
    _locationsByRegion.Add(regionId, LocationIdsIds);
}

Этот код предназначен для создания словаря с моими «идентификаторами регионов» в качестве ключей и списками «идентификаторов местоположений» в качестве значений.

Однако на самом деле происходит то, что я получаю словарь с «идентификаторами региона» в качестве ключей, но значение для каждого ключа идентично: это список местоположений для последнего идентификатора региона в regionIds!

Похоже, это продукт того, как оцениваются лямбда-выражения. Я могу получить правильный результат, преобразовав список идентификаторов местоположений в массив, но это похоже на путаницу.

Как лучше всего справиться с этой ситуацией?

10
задан Daniel Allen Langdon 22 July 2011 в 18:37
поделиться