C# 如何更新集合类型对象中的值

C# 如何更新集合类型对象中的值,c#,C#,我创建了一个类的列表对象,在那之后,我更新了它的值,它的值没有更新。请帮助我,这是我的代码 public class LocationData { public int LocId { get; set; } public string LocatinName { get; set; } public int ControlCount { get; set; } public Nullable<short> KeyType { get; set; }

我创建了一个类的列表对象,在那之后,我更新了它的值,它的值没有更新。请帮助我,这是我的代码

public class LocationData
{
    public int LocId { get; set; }
    public string LocatinName { get; set; }
    public int ControlCount { get; set; }
    public Nullable<short> KeyType { get; set; }
    public Nullable<short> Financial_Reporting { get; set; }
    public Nullable<short> FraudRisk { get; set; }
    public Nullable<short> FinancialControl { get; set; }
    public Nullable<short> ELC { get; set; }
}

 var locList = location.Select(a =>
               new LocationData { LocatinName = a.Location, LocId = a.LocID });
但是没有更新,我也尝试了这个,但没有更新

(from loc in locList select loc).ToList().ForEach((loc) =>
{
   loc.ControlCount = loc.ControlCount + 1;
});

这是因为在声明
lacList
时,实际上并没有获取任何具体化的对象。它只是一个查询定义(因为LINQ执行被延迟),所以每次使用它时都会创建新的
LocationDate

声明
lacList
时调用
ToList()

var locList= location.Select(a => new LocationData { LocatinName = a.Location, LocId = a.LocID }).ToList();
老实说,我不明白为什么要用
List.ForEach
方法代替od
ForEach
循环。您必须具体化新的
List
,才能使用源集合上的
Where
过滤器集调用该方法。在使用
foreach
时,您不必这样做:

foreach(var item in locList.Where(a => a.LocID == 7))
{
    item.ControlCount += 1;
}

这是因为在声明
lacList
时,实际上并没有获取任何具体化的对象。它只是一个查询定义(因为LINQ执行被延迟),所以每次使用它时都会创建新的
LocationDate

声明
lacList
时调用
ToList()

var locList= location.Select(a => new LocationData { LocatinName = a.Location, LocId = a.LocID }).ToList();
老实说,我不明白为什么要用
List.ForEach
方法代替od
ForEach
循环。您必须具体化新的
List
,才能使用源集合上的
Where
过滤器集调用该方法。在使用
foreach
时,您不必这样做:

foreach(var item in locList.Where(a => a.LocID == 7))
{
    item.ControlCount += 1;
}

你也可以在一行中这样做

locList.Where(o => o.LocID == 7).Select(aa => aa.ControlCount += 1).ToList();

你也可以在一行中这样做

locList.Where(o => o.LocID == 7).Select(aa => aa.ControlCount += 1).ToList();

只需在列表中循环并更新每个项目的属性即可。是的,授予Winney我完全确定值我怀疑问题在于您调用此locList.FindAll(a=>a.LocId==7.ToList().ForEach(b=>b.ControlCount=b.ControlCount+1);HI mbeckish我尝试了这个foreach循环,但没有更新foreach(locList中的LocationData loc){if(loc.LocId==item.TopLoc){loc.ControlCount=1;}}只需在列表中循环并更新每个项目的属性即可。是的,授予Winney我完全确定值我怀疑问题在于您调用此locList.FindAll(a=>a.LocId==7.ToList().ForEach(b=>b.ControlCount=b.ControlCount+1);HI mbeckish我尝试了这个foreach循环,但没有更新foreach(locList中的LocationData loc){if(loc.LocId==item.TopLoc){loc.ControlCount=1;}}