Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#使用Linq更新列表中的对象_C#_Linq - Fatal编程技术网

c#使用Linq更新列表中的对象

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

我有一个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 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;
    }
}