Вот Rx-версия вашего кода:
var query =
from filterGridStatusItem in FilterStatusItems.ToObservable()
where filterGridStatusItem.FilerValue.Equals(selectedItem.FilerValue)
select new { filterGridStatusItem, selectedItem.IsSelected };
IDisposable subscription =
query
.Subscribe(x => x.filterGridStatusItem.IsSelected = !x.IsSelected);
Теперь, просто для сравнения, вот оптимизированная версия вашего кода:
foreach (var filterGridStatusItem in FilterStatusItems)
{
if (filterGridStatusItem.FilerValue.Equals(selectedItem.FilerValue))
{
filterGridStatusItem.IsSelected = !selectedItem.IsSelected;
}
}
А теперь версия LINQ:
var query =
from filterGridStatusItem in FilterStatusItems
where filterGridStatusItem.FilerValue.Equals(selectedItem.FilerValue)
select new { filterGridStatusItem, selectedItem.IsSelected };
foreach (var x in query)
{
x.filterGridStatusItem.IsSelected = !x.IsSelected;
}
В этом случае я чувствую, что оптимизированная версия вашего кода является лучшей - как с точки зрения ясности, так и производительности.