Обновление с использованием Linq Query - PullRequest
1 голос
/ 27 января 2011

У меня есть две коллекции. У одного есть переменная ID (int) и IsIDValid (bool). и Другая коллекция имеет идентификатор (int). Я хочу обновить свойство IsIDValid первой коллекции до значения true, если идентификатор существует во второй коллекции.

РЕДАКТИРОВАТЬ: Спасибо за ответы. Можно ли как-то сделать это без использования цикла foreach.

Ответы [ 4 ]

1 голос
/ 27 января 2011

Простой:

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;
}
0 голосов
/ 27 января 2011

Вдобавок к Jon's, вы также можете использовать 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 самостоятельно. Я понятия не имею, что более эффективно под одеялом, но я надеюсь, что Join был по крайней мере таким же хорошим.

0 голосов
/ 27 января 2011

Этот ответ SO содержит дополнительную информацию об обновлении нескольких строк с использованием linq.

0 голосов
/ 27 января 2011

Это работает:

var valid = firstCollection.Where(f=> secondCollection.Any(s=> s.ID == f.ID));
foreach (var v in valid) { v.IsValid = true; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...