c#使用Linq更新列表中的对象
我有一个viewmodel,它建立了一些关系c#使用Linq更新列表中的对象,c#,linq,C#,Linq,我有一个viewmodel,它建立了一些关系 public class object() { public int Id {get; set;} public string Name {get;set;} public decimal Amount {get;set;} } public class myViewModel() { public int Id {get;set;} public List<object> myObjects
public class object()
{
public int Id {get; set;}
public string Name {get;set;}
public decimal Amount {get;set;}
}
public class myViewModel()
{
public int Id {get;set;}
public List<object> myObjects {get;set;}
}
假设我已将数据填充到MyObject列表中
var record = query.myobjects.FirstOrDefault(x => x.Name = "Test");
从该列表中提取正确的元素,但如何更新列表中的vale是我一直坚持的问题。我试过:
query.myObject.FirstOrDefault(x => x.Name == "Test").Amount = 99;
及
两者都不起作用。以下是我在LinqPad中运行的完整代码:
void Main()
{
var query = new myViewModel();
query.myObjects.FirstOrDefault(x => x.Name == "Test").Amount = 99;
query.Dump();
}
// Define other methods and classes here
public class objectX
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Amount { get; set; }
}
public class myViewModel
{
public int Id { get; set; }
public List<objectX> myObjects { get; set; }
public myViewModel()
{
myObjects = new List<UserQuery.objectX>();
myObjects.Add(new objectX { Amount = 100, Id = 1, Name = "ABC" });
myObjects.Add(new objectX { Amount = 200, Id = 2, Name = "Test" });
myObjects.Add(new objectX { Amount = 300, Id = 3, Name = "GHI" });
}
}
void Main()
{
var query=新的myViewModel();
query.myObjects.FirstOrDefault(x=>x.Name==“Test”).Amount=99;
query.Dump();
}
//在此处定义其他方法和类
公共类objectX
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共十进制数{get;set;}
}
公共类myViewModel
{
公共int Id{get;set;}
公共列表myObjects{get;set;}
公共myViewModel()
{
myObjects=新列表();
添加(新对象x{Amount=100,Id=1,Name=“ABC”});
添加(新对象x{Amount=200,Id=2,Name=“Test”});
添加(新对象x{Amount=300,Id=3,Name=“GHI”});
}
}
输出:
清单(3项)
Id |姓名|金额
1 | ABC | 100
2 |测试| 99
3 | GHI | 300
|| 499你的问题表明你应该去读一本好的C#书 基本上你把=和==搞混了。您可以做的是创建一个方法并逐步进行,例如
public class myViewModel
{
public int Id {get;set;}
public List<object> myObjects {get;set;}
public bool ChangeAmountByName(string name, decimal amount)
{
var match = this.myobjects.FirstOrDefault(x => x.Name == name);
if (match == null) return false;
match.Amount = amount;
return true;
}
}
公共类myViewModel
{
公共int Id{get;set;}
公共列表myObjects{get;set;}
public bool ChangeAmountByName(字符串名称,十进制金额)
{
var match=this.myobjects.FirstOrDefault(x=>x.Name==Name);
if(match==null)返回false;
匹配。金额=金额;
返回true;
}
}
这只是几种可能的解决方案之一。但“分而治之”总是很重要的,也就是说,将你的任务分为几个步骤:首先,获得你的匹配记录。确认它在那里;不知怎的,它不见了。然后做你的价值更新
public class object()
不是有效的类声明,public class myViewModel()
…第一个对象有什么“不起作用”?对于第二个问题,您为什么要将FirstOrDefault(…)
与结果进行比较呢?基本上,您创建了一个方法UpdateAmount并逐步进行,例如,请显示您的实际代码,因为发布的代码根本没有编译,因此不足以重现您的问题。James,谢谢,还提到威震天,因为这也解决了问题。
void Main()
{
var query = new myViewModel();
query.myObjects.FirstOrDefault(x => x.Name == "Test").Amount = 99;
query.Dump();
}
// Define other methods and classes here
public class objectX
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Amount { get; set; }
}
public class myViewModel
{
public int Id { get; set; }
public List<objectX> myObjects { get; set; }
public myViewModel()
{
myObjects = new List<UserQuery.objectX>();
myObjects.Add(new objectX { Amount = 100, Id = 1, Name = "ABC" });
myObjects.Add(new objectX { Amount = 200, Id = 2, Name = "Test" });
myObjects.Add(new objectX { Amount = 300, Id = 3, Name = "GHI" });
}
}
public class myViewModel
{
public int Id {get;set;}
public List<object> myObjects {get;set;}
public bool ChangeAmountByName(string name, decimal amount)
{
var match = this.myobjects.FirstOrDefault(x => x.Name == name);
if (match == null) return false;
match.Amount = amount;
return true;
}
}