c#使用Linq更新List中的对象

时间:2017-05-23 14:18:34

标签: 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 {get;set;}

}

我想要做的是在给定对象名称的情况下更改特定myObject元素的数量。

var query = new myViewModel();

假设我已将数据填充到myObjects列表中。

var record = query.myobjects.FirstOrDefault(x => x.Name = "Test");

从此列表中提取正确的元素,但是如何更新列表中的值是我所坚持的。我试过了:

query.myObject.FirstOrDefault(x => x.Name == "Test").Amount = 99;

query.myObject.FirstOrDefault(x => x.Name == "Test") == record;

既不起作用。

2 个答案:

答案 0 :(得分:1)

这是我在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" });
    }

}

输出:

列表(3项) Id |名称|量

1 | ABC | 100

2 |测试| 99

3 | GHI | 300

| | 499

答案 1 :(得分:0)

&#39;你的问题表明你应该去&amp;读一本好的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;
    }
}

这只是几种可能的解决方案之一。但是,分裂和征服&#34;总是很重要,即将你的任务分成几步:这是:首先得到你的匹配记录。确认它在那里;以某种方式反应它失踪了。然后更新你的价值!