我有两个系列。一个有ID(int)和IsIDValid(bool)变量。和其他集合有ID(int)。我想将第一个集合的IsIDValid属性更新为true,如果该ID存在于第二个集合中。
编辑:谢谢你的回答。我可以不使用foreach循环以某种方式做到这一点。答案 0 :(得分:1)
简单:
var validIds = new HashSet<int>(other.Select(x => x.Id));
var query = firstCollection.Where(x => validIds.Contains(x.Id));
foreach (var item in query)
{
item.IsIdValid = true;
}
答案 1 :(得分:0)
这有效:
var valid = firstCollection.Where(f=> secondCollection.Any(s=> s.ID == f.ID));
foreach (var v in valid) { v.IsValid = true; }
答案 2 :(得分:0)
This SO answer提供了有关使用linq更新多行的更多信息。
答案 3 :(得分:0)
按照Jon的说法,你也可以使用LINQ的Join
var query = firstCollection.Join(other, fc => fc.Id, o => o.Id, (fc, o) => fc);
foreach (var item in query)
{
item.IsIdValid = true;
}
这基本上是相同的,除了你让LINQ选择合并两个集合的策略而不是自己明确地构建一个HashSet。我不知道哪个更有效率,但我希望加入至少同样好。