IEnumerableコレクション内のオブジェクトのプロパティを変更する際に問題が発生しています。コレクション内のエンティティ間で重複した情報を削除するために、コレクションを別のメソッドに渡します。これはメソッド内で動作しますが、メソッドが実行されて呼び出し元に戻ると、変更は失われます。しかし、IEnumerableをリストに変換すると、期待どおりに動作します。私の唯一の推測は、ToListを呼び出すと具体的な型になり、それが動作することができるので、しかし、それは制限ではありません、そうですか?IEnumerable内のオブジェクトのプロパティを変更できません<T>
また、遅延実行のコンテキストではないことは何も価値がありません。あなたのRetrieveTrackingFilters(proNumber)
はIQueryable
を返す場合、これは、その後、
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
あなたのタイプは実際に構造体ですか? –