Сообщение Re[2]: Observable calculations от 17.11.2019 16:44
Изменено 17.11.2019 17:00 igor-booch
Re[2]: Observable calculations
S>А почему не сделать собственно Linq?
S>Я имею в виду — примерно так:
S>
S>И, соответственно,
S>
S>В текущем виде как-то оно многословно выходит.
Не понимаю где в коде выше точка, в которой возможно подключить использование OC.
Я думал на там чтобы заюзать LINQ к IQueryable, тогда были бы стандартные LINQ функции, но код был бы более громоздким:
В принципе любой желающий может создать IQueryable wrapper для OC, но я смысла в этом не вижу.
S>Я имею в виду — примерно так:
S>
S>static void Main(string[] args)
S>{
S> var orders = new ObservableCollection<Order>()
S> {
S> new Order(1, 15),
S> new Order(2, 15),
S> new Order(3, 25),
S> new Order(4, 27),
S> new Order(5, 30),
S> new Order(6, 75),
S> new Order(7, 80),
S> });
S> //********************************************
S> // We start using ObservableCalculations here!
S> var expensiveOrders = from o in orders where o.Price > 25 select o;
S> checkFiltering(orders, expensiveOrders);
S> expensiveOrders.CollectionChanged += (sender, eventArgs) =>
S> {
S> // see the changes (add, remove, replace, move, reset) here
S> };
S> // Start the changing...
S> orders.Add(new Order(8, 30));
S> orders.Add(new Order(9, 10));
S> orders[0].Price = 60;
S> orders[4].Price = 10;
S> orders.Move(5, 1);
S> orders[1] = new Order(10, 17);
S> checkFiltering(orders, expensiveOrders); // Prints "True"
S>
S>И, соответственно,
S>
S> var discountedOrders = from o in orders select new {o.Num, o.Price, o.Discount, DiscountedPrice = o.Price - o.Price * o.Discount / 100};
S>
S>В текущем виде как-то оно многословно выходит.
Не понимаю где в коде выше точка, в которой возможно подключить использование OC.
Я думал на там чтобы заюзать LINQ к IQueryable, тогда были бы стандартные LINQ функции, но код был бы более громоздким:
CollectionCalculationSource<Order> orders =
new ObservableCollection<Order>(new []
{
new Order(1, 15),
new Order(2, 15),
new Order(3, 25),
new Order(4, 27),
new Order(5, 30),
new Order(6, 75),
new Order(7, 80),
}).AsObservableCalculationSource();
//********************************************
// We start using ObservableCalculations here!
var expensiveOrders = (from o in orders where o.Price > 25 select o).Observe();
checkFiltering(orders, expensiveOrders); // Prints "True"
expensiveOrders.CollectionChanged += (sender, eventArgs) =>
{
// see the changes (add, remove, replace, move, reset) here
};
В принципе любой желающий может создать IQueryable wrapper для OC, но я смысла в этом не вижу.
Re[2]: Observable calculations
S>А почему не сделать собственно Linq?
S>Я имею в виду — примерно так:
S>
S>И, соответственно,
S>
S>В текущем виде как-то оно многословно выходит.
Не понимаю где в коде выше точка, в которой возможно подключить использование OC.
Я думал на тем чтобы заюзать LINQ к IQueryable, тогда были бы стандартные LINQ функции, но код был бы более громоздким:
В принципе можно создать IQueryable wrapper для OC, но я смысла в этом не вижу.
S>Я имею в виду — примерно так:
S>
S>static void Main(string[] args)
S>{
S> var orders = new ObservableCollection<Order>()
S> {
S> new Order(1, 15),
S> new Order(2, 15),
S> new Order(3, 25),
S> new Order(4, 27),
S> new Order(5, 30),
S> new Order(6, 75),
S> new Order(7, 80),
S> });
S> //********************************************
S> // We start using ObservableCalculations here!
S> var expensiveOrders = from o in orders where o.Price > 25 select o;
S> checkFiltering(orders, expensiveOrders);
S> expensiveOrders.CollectionChanged += (sender, eventArgs) =>
S> {
S> // see the changes (add, remove, replace, move, reset) here
S> };
S> // Start the changing...
S> orders.Add(new Order(8, 30));
S> orders.Add(new Order(9, 10));
S> orders[0].Price = 60;
S> orders[4].Price = 10;
S> orders.Move(5, 1);
S> orders[1] = new Order(10, 17);
S> checkFiltering(orders, expensiveOrders); // Prints "True"
S>
S>И, соответственно,
S>
S> var discountedOrders = from o in orders select new {o.Num, o.Price, o.Discount, DiscountedPrice = o.Price - o.Price * o.Discount / 100};
S>
S>В текущем виде как-то оно многословно выходит.
Не понимаю где в коде выше точка, в которой возможно подключить использование OC.
Я думал на тем чтобы заюзать LINQ к IQueryable, тогда были бы стандартные LINQ функции, но код был бы более громоздким:
CollectionCalculationSource<Order> orders =
new ObservableCollection<Order>(new []
{
new Order(1, 15),
new Order(2, 15),
new Order(3, 25),
new Order(4, 27),
new Order(5, 30),
new Order(6, 75),
new Order(7, 80),
}).AsObservableCalculationSource();
//********************************************
// We start using ObservableCalculations here!
var expensiveOrders = (from o in orders where o.Price > 25 select o).Observe();
checkFiltering(orders, expensiveOrders); // Prints "True"
expensiveOrders.CollectionChanged += (sender, eventArgs) =>
{
// see the changes (add, remove, replace, move, reset) here
};
В принципе можно создать IQueryable wrapper для OC, но я смысла в этом не вижу.