关于c#:使用LINQ循环和更新集合中的对象值

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,技巧吗?