Loop and update object value in a collection using LINQ
我想遍历集合中的每个对象,然后用另一个数组集合更新每个对象的属性
我的用例是,我有一些最初从集合中读取到数组中的实体,执行一些复杂的计算,然后更新我的原始集合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public void WhatIfCalculation(string Product, string SiteID, System.Linq.IQueryable<DAL.OMS_StockStatus> prodStatus, ref System.Linq.IQueryable<PivotViewModel> activityInfo) { var sff = activityInfo.Where(a => a.Activity =="System Forecast" && a.SiteID == SiteID).ToList(); aSFF = new double?[sff.Count()]; for (int i = 0; i < sff.Count(); i++) { aSFF[i] = sff.ElementAt(i).Value + 1; } var prf = activityInfo.Where(a => a.Activity =="Planned Receipts" && a.SiteID == SiteID).ToList(); aPRF = new double?[prf.Count()]; for (int i = 0; i < prf.Count(); i++) { aPRF[i] = prf.ElementAt(i).Value + 2; } // Will perform some calculation here. And then update back my collection. for (int i = 0; i < aSFF.Length; i++) { activityInfo.Where(a => a.Activity =="System Forecast" && a.SiteID == SiteID).ToList().ElementAt(i).Value = aSFF[i]; } for (int i = 0; i < aPRF.Length; i++) { activityInfo.Where(a => a.Activity =="Planned Receipts" && a.SiteID == SiteID).ToList().ElementAt(i).Value = aPRF[i]; } } |
但上面的更新并没有更新我的收藏。当我浏览我的活动信息时,它仍然显示原始值。
试试下面的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public void WhatIfCalculation(string Product, string SiteID, List<DAL.OMS_StockStatus> prodStatus, List<PivotViewModel> activityInfo) { var sff = activityInfo.Where(a => a.Activity =="System Forecast"); // Do this in the calling function >> .Where(a => a.SiteID == SiteID).ToList(); aSFF = new double?[sff.Count()]; for (var i = 0; i < sff.Count(); i++) { aSFF[i] = sff.ElementAt(i).Value + 1; } var prf = activityInfo.Where(a => a.Activity =="Planned Receipts"); aPRF = new double?[prf.Count()]; for (var i = 0; i < prf.Count(); i++) { aPRF[i] = prf.ElementAt(i).Value + 2; } // Will perform some calculation here. And then update back my collection. for (var i = 0; i < aSFF.Length; i++) { sff.ElementAt(i).Value = aSFF[i]; } for (var i = 0; i < aPRF.Length; i++) { prf.ElementAt(i).Value = aPRF[i]; } } |
你可以看到我的货物而不是一个iqueryable列表的方法。原因是冰,冰iqueryable事实的查询语言和没有记录本身。
你是做什么的basically冰一批查询的方法,比使用你选择的两项改变他们。项目的实际是不改变的。
使用下面的《你是一批以列表的实际项目。《项目能比的了。在删除一些双打也选择从两个命题的方法提高你的速度。
这也应该是有用的:之间的差异iqueryable IEnumerator,技巧吗?