Здравствуйте, igor-booch, Вы писали:
IB>Перевожу на linq-2-objects дополнив примером из реальной жизни:
IB>IB>IEnumerable<Order> filteredOrders = orders.Where(o =>
IB> selectedOrderTypes.Contains(
IB> o.Type))
IB>
IB>Вот OC верcия:
IB>IB>ObservableCollection<Order> filteredOrders = orders.Filtering(o =>
IB> selectedOrderTypes.ContainsComputing<OrderType>(
IB> Expr.Is(() => o.Type).Computing()).Value);
IB>
IB>selectedOrderTypes тоже должна быть ObservableCollection<OrderType>. Order должен реализовать INotifyPropertyChanged.
IB>Далее можно менять selectedOrderTypes (add, remove), можно менять свойство Type у любого Order, можно менять коллекцию orders:
IB>filteredOrders всегда будет содержать свежий результат.
IB>Заметь что, в ContainsComputing аргумент o.Type передаётся не как значение (как в случае linq-2-objects), а как OC вычисление. (Похоже как передача аргументов по значению и по ссылке.) Это нужно чтобы во вложенном вычислении отслеживалось значение свойства Order.Type. Вот тебе ещё одна причина почему нельзя так просто использовать перегруженные linq-2-objects методы, как ты предлагал.
Ага, интересно. Гляну на устройство ContainsComputing и как вообще это всё работает.
Магия задействована очень могучая, смущает, конечно, громоздкость синтаксиса. Не за то наши деды воевали, чтобы мы писали Expr.Is(() => o.Type).Computing().Value