使用Linq查询进行更新

时间:2011-01-27 14:30:49

标签: .net linq linq-to-entities

我有两个系列。一个有ID(int)和IsIDValid(bool)变量。和其他集合有ID(int)。我想将第一个集合的IsIDValid属性更新为true,如果该ID存在于第二个集合中。

编辑:谢谢你的回答。我可以不使用foreach循环以某种方式做到这一点。

4 个答案:

答案 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。我不知道哪个更有效率,但我希望加入至少同样好。