【问题标题】:update atribute in a list of objects using another list using Lambda C#使用 Lambda C# 使用另一个列表更新对象列表中的属性
【发布时间】:2019-03-26 10:26:14
【问题描述】:

我想更新对象列表中的属性。该属性来自 aspnetUsers 列表

这是对象

Object
{
  public Guid Id { get; set; }
  public string profesionalId{ get; set; }
   public string attributeToUpdate { get; set; }
}

我有这段代码不工作

List<Object> MyListOfObject=new List<Object>();
// do some queries to populate the list
// more things here...
//my first problem comes here, can not get the list of users
var listOfUsers=  _dbContext.Users.Where(u => MyListOfObject.Any(id => id.ProfesionalId == u.Id)).ToList();

如果上面的代码可以工作,我想做一个

MyListOfObject.ForEach(
 //here replace the MyListOfObject.attributeToUpdate 
).where (MyListOfObject.profesionalId==listOfUsers.Id)

请问我可以解决这个问题吗? 我尽力了,但无法解决。谢谢

【问题讨论】:

  • Where 和 Select 等操作专门设计用于修改原始集合。但是,当您使用列表时,您可以使用 List&lt;T&gt;.ForEach(T =&gt; /*do something with T*/)
  • 感谢您的快速回答,是的...我的问题是我无法修改 foreach 内的属性
  • 啊,我没看到你已经在使用它了。您可以使用MyListOfObject.ForEach(o =&gt; o.attributeToUpdate = newValue),但如果 newValue 无法计算一次,或者需要某种索引器,请不要因为需要使用传统的 for 循环而感到难过。
  • 问题是新值来自aspnet用户列表,问题是如何更新user.id = mylistOfObject.profesionalId
  • 如果您无法使用 LINQ 找到答案,老实说,如果您使用带有 iffor 循环,请不要感到失败:)

标签: c# entity-framework linq lambda


【解决方案1】:

建立列表:

var listOfUsers= _dbContext.Users.Where(u => MyListOfObject.Select(c=>c.ProfesionalId).ToList().Contains(u.id)).ToList(); 

但通常你应该可以这样做:

MyListOfObject.ForEach(l => l.PropertyToUpdate= _dbContext.Users.First(x => x.id == l.ProfessionalId).PropertyYouGetDataFrom);

【讨论】:

  • 非常感谢。这真的很有用。我们可以使用 await _dbContext 吗?
  • @evvk,我相信枚举是同步运行的
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多