【发布时间】:2014-07-15 14:12:50
【问题描述】:
我有一个不断变化的对象集合(在集合中添加/删除以及属性更改也是可能的)。
我想通过对此集合的一些计算来获得一个新集合(对具有相同字段值的所有对象的某些字段进行求和/乘法)。并将计算列表绑定到 UI。
例如:所以我有几个水果的不同质量的比率和数量列表,现在我想找到一个新列表,其中包含每个水果的平均比率和总数量(无论质量如何),因为比率和数量可以运行时会发生变化,并且可以将更多品质和水果种类添加到集合中。
现在,如果在运行时第一个列表中的费率或数量发生变化,则第二个列表中的更改也应反映。
考虑到我们将列表绑定到数据网格,请建议应该使用哪些方法来实现它。
【问题讨论】:
-
LINQ 应该是你的朋友 - GroupBy、Sum 和 Average 方法。
-
你有没有尝试过?我们能看到任何代码吗?
-
在每次更改时一次又一次地进行所有计算是一个明智的想法吗?这会导致性能下降。在我的情况下,我在第一个列表中有 100-400 个项目和另外 4 个正在更改的属性。因此,如果我对每次更改进行此计算,则计算的平均频率为 40-50。
-
@micheal: groupBy(Name) & 然后聚合所有这些组,但这太慢了。
-
我订阅了 notifypropertychanged 和 calculationchange 并且每次都触发 linq 查询。有没有办法控制这些计算时间 - 比如说在每 50 毫秒后运行 linq 查询,如果可能的话在后台运行,这样 UI 就不会冻结。
标签: c# wpf linq system.reactive xamdatagrid