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
方法代替odForEach
循环。您必须具体化新的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
方法代替odForEach
循环。您必须具体化新的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;}}