Я написал следующий код 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!
Похоже, это продукт того, как оцениваются лямбда-выражения. Я могу получить правильный результат, преобразовав список идентификаторов местоположений в массив, но это похоже на путаницу.
Как лучше всего справиться с этой ситуацией?