IEnumerable 컬렉션의 개체 속성을 변경하는 데 문제가 있습니다. 컬렉션 내의 엔티티에서 중복 된 정보를 제거하기 위해 컬렉션을 다른 메서드로 전달합니다. 이것은 메소드 내에서 작동하지만 일단 메소드가 실행을 완료하고 호출자에게 리턴하면 변경 사항은 유실됩니다. 그러나 IEnumerable을 목록으로 변환하면 예상대로 작동합니다. 내 유일한 추측은 내가 ToList를 호출 할 때 구체적인 유형이되어 작동하도록 허용하기 때문에,하지만 제한이 있어서는 안된다는 것입니다.IEnumerable 내의 개체 속성을 수정할 수 없습니다. <T>
또한 지연된 실행의 컨텍스트에있는 것은 아닙니다.
public IEnumerable<TrackingFilter> RetrieveTrackingFilters(string proNumber)
{
var trackingFilters = new EntityCollection<TrackingOverviewFilterEntity>(new TrackingOverviewFilterEntityFactory());
var filter = new RelationPredicateBucket();
filter.Relations.Add(TrackingOverviewFilterEntity.Relations.TrackingOverviewEntityUsingTrackingOverviewId);
filter.PredicateExpression.Add(TrackingOverviewFields.ProNumber == proNumber);
DataAccessAdapterFactory.Instance().FetchEntityCollection(trackingFilters, filter);
return BuildTrackingFilterColl(trackingFilters); //Just news up a DTO object and populates it
}
public TrackingSummaryViewModel RetrieveTrackingSummary(string proNumber)
{
...
var trackingFilters = this._TrackingOverviewDataController.RetrieveTrackingFilters(proNumber).ToList(); //Works
//var trackingFilters = this._TrackingOverviewDataController.RetrieveTrackingFilters(proNumber); //Doesn't work
RemoveDuplicateFilterData(trackingFilters); //If I don't do a ToList() then the changes that occur in this method call do not persist
...
}
private static void RemoveDuplicateFilterData(IEnumerable<TrackingFilter> filters)
{
var valuePairs = new Dictionary<string, IList<object>>();
foreach (var filter in filters)
{
if (valuePairs.ContainsKey("comments") && valuePairs["comments"].Contains(filter.Comments))
{
filter.Comments = string.Empty;
}
else if (!string.IsNullOrWhiteSpace(filter.Comments))
{
if (!valuePairs.ContainsKey("comments"))
{
valuePairs.Add("comments", new List<object>());
}
valuePairs["comments"].Add(filter.Comments);
}
}
...
}
.ToList()는 목록에 캐스트되지 않으며, IEnumerable의 값으로 새 목록을 만드는 확장 메서드입니다. 결과는 목록에 캐스트 된 이전 구조가 아니라 이전 요소와 동일한 요소가있는 새로운 구조입니다. –
@albin sunnanbo, 죄송합니다, 당신이 맞습니다, 나는 잘못된 말을 사용했습니다. 나는 그것을 실제로 알고 있었다. – joshlrogers
실제로 유형이 구조체입니까? –