我有两个列表并根据一组值进行过滤。
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();
但无法成功,因为它只提供过滤结果。 我想要匹配的完整记录,哪些不是
答案 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
集合,而不是返回已过滤的集合。
我认为这是你感到困惑的地方。