如何使用foreach循环在List中设置值

时间:2017-01-05 10:55:40

标签: linq linq-expressions

我有两个列表并根据一组值进行过滤。

 var UserIdList = response.Users.Select(p => p.Id).ToList();

 var filteredRecords = 
(from o in om.Organizations join u in om.Users on o.Id equals u.OrganizationId where UserIdList.Contains(u.Id)    
                 select new { Enabled = o.Enabled, Id = u.Id }).ToList();

现在,如果'Exists'中存在“response.Users”,我想将“Id”中的filteredRecords属性设置为true。

请告诉我如何使用foreach循环设置值。  我试过

 response.Users.Where(x => x.Exists = (filteredRecords .Any(z => z.Id == x.Id))).ToList();

但无法成功,因为它只提供过滤结果。 我想要匹配的完整记录,哪些不是

2 个答案:

答案 0 :(得分:2)

Linq并不真正支持更新方案,因为它用于查询数据。

对于列表,但是有一个ForEach扩展方法:

UserList
  .ToList()
  .ForEach(item=> item.Exists = filteredRecords.Any(f=> f.Id == item.Id));

比foreach循环更清晰易懂,更容易理解......

修改(问题更新后)

// You can't use this... it won't even compile, 
// x.Exists = ... is an assignment not a condition
response.Users.Where(x => x.Exists = (filteredRecords .Any(z => z.Id == x.Id))).ToList();

您要做的是使用一部分用户并更新值。

response
  .Users
  .Where(x=> filteredRecords.Any(z => z.Id == x.Id))
  .ToList() // This materialises your IEnumerable/IQueryable to allow the ForEach extension method
  .ForEach(x => x.Exists = true);

你当然可以使用:

var usersToEnable = response.Users.Where(x=> filteredRecords.Any(z => z.Id == x.Id);
foreach(var user in usersToEnable)
  user.Enabled = true;

答案 1 :(得分:0)

作为对:

的直接回应
  

请告诉我如何使用foreach循环设置值。我试过

 response.Users.Where(x => x.Exists = (filteredRecords .Any(z => z.Id == x.Id))).ToList(); but could not succeed as it is giving only
     

过滤结果。我想要完整的记录,哪些是匹配的,哪些是   不

您已完成的工作选择了一组您希望Exists设置为true的响应用户项。

现在,您需要在此筛选的集合中设置该bool,然后返回完整 response集合,而不是返回已过滤的集合。

我认为这是你感到困惑的地方。