可绑定 LINQ 与连续 LINQ
可绑定 LINQ 和连续 LINQ 之间的主要区别是什么?
•可绑定 LINQ:www.codeplex.com/bindablelinq
•连续 LINQ:www.codeplex.com/clinq
根据提供的反馈又添加了一个项目:
•Obtics:obtics.codeplex.com
What are the major difference between bindable LINQ and continuous LINQ?
•Bindable LINQ: www.codeplex.com/bindablelinq
•Continuous LINQ: www.codeplex.com/clinq
One more project was added basing on the provided feedback:
•Obtics: obtics.codeplex.com
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这些包试图解决两个问题:缺少 CollectionChanged 事件和动态结果集。 还有一个可绑定解决的问题,即附加的自动事件触发器。
这两个包旨在解决的第一个问题是:
连续 LINQ 自动对所有查询执行此操作,无需任何更改:
Bindable LINQ 在将 .asBindable 添加到查询源对象时执行此操作:
第二个问题
通常,当您执行 LINQ 查询时,您的结果集不会改变,直到您执行新的查询。 使用这两个包,只要源更新,您的结果集就会更新。 (对性能不利,但有利于实时更新)
示例
因为您使用 Bindable 或 Continuous LINQ,您可以修改 theSource,theResultSet 将自动包含新项目。
附加问题 可绑定的 LINQ 提供:(直接从他们自己的页面引用)
Their are 2 problems both these packages try to solve: Lack of a CollectionChanged event and Dynamic result sets. There is one additional problem bindable solves, additional automatic event triggers.
The First Problem both packages aim to solve is this:
Continuous LINQ automatically does this to all queries, with no change:
Bindable LINQ does this when you add .asBindable to your query Source Object:
The Second Problem both packages aim to solve is:
Normally when you do a LINQ Query your result set is unchanged until you do a new query. With these two packages, your result set is updated whenever the source is updated. (bad for performance, good for realtime updates)
Example
Because your using Bindable or Continuous LINQ, you could modify theSource, and theResultSet would automatically include the new item.
The Additional Problem Bindable LINQ offers: (Quoting directly from their own page)
我可以提请您注意另一个 codeplex 项目吗? 它称为 Obtics,处理相同的问题 (http://obtics.codeplex.com)。
它解决了第一个问题、第二个问题和附加问题,并将反应性提升到非常深的水平(使用基于 LINQ 的光线跟踪器进行了演示)。
它声称完全支持所有 LINQ 语句和 Enumerable 类的方法。
它使用另一种机制来创建实时查询:
May I draw your attention to another codeplex project? It's called Obtics and deals with the same issues (http://obtics.codeplex.com).
It addresses both the first the second and the additional problem and takes reactivity to a very deep level (has a demonstration with a LINQ based raytracer).
It claims full support for all LINQ statements an methods of the Enumerable class.
It uses yet another mechanism to create live queries:
的确; Continuous LINQ 的主要问题是无法使用任何实现通用 IEnumerable 和 INotifyCollectionChanged 的集合。 Bindable LINQ 使用自定义集合实现这两个接口没有问题。
Indeed; the main issue with Continuous LINQ is the inability to use any collection that implements the generic IEnumerable and INotifyCollectionChanged. Bindable LINQ has no problem with using custom collections implementing the two interfaces.
另一件需要记住的事情是,虽然 BindableLinq 需要在 LINQ 语句中调用“.AsBindable()”,但 CLINQ 要求您使用 ContinuousCollection。 而不是 ObservableCollection。 简要查看两者后,我想我将选择可绑定 LINQ。
Another thing to keep in mind, although BindableLinq requires the ".AsBindable()" call in the LINQ statement, CLINQ requires that you use ContinuousCollection<T> instead of ObservableCollection<T>. After looking at both briefly, I think I'm going to go with bindable LINQ.
使用可绑定的 LINQ,因为它实现了 IDisposable,因此您可以控制何时处理查询。 当您处置它时,所有对 INotifyPropertyChanged 的订阅都将取消订阅。
连续 LINQ 应该可以通过弱事件解决这个问题,但据我测试,它不起作用。
嗯...这似乎是可绑定 LINQ 的问题(第二个断言失败):
Use bindable LINQ, as it implements IDisposable, and therefore you can control when a query gets disposed. When you dispose it, all the subscriptions to INotifyPropertyChanged will unsubscribe.
Continuous LINQ is supposed to solve this problem with weak events, but it doesn't work as far as I was able to test.
Hmm... this seems to be a problem with bindable LINQ (the second assert fails):
我认为 Bindable LINQ 和连续 LINQ 大致相同:它们提供对 LINQ 计算变化的观察。 提供的实现和 API 可能有所不同。 看来我的 ObservableComputations 库涵盖了 Bindable LINQ 和连续 LINQ 预期的功能,并且没有 https://stackoverflow.com/a/174924/2663791。 该库可与 INotifyPropertyChanged 和 INotifyCollectionChanged 接口,使得可以使用 ObservableCollection 。
使用该库,您可以像这样编写代码:
请将 ObservableComputations 库添加到问题中的列表中(在眼科)。
I think Bindable LINQ and continuous LINQ are about the same: they provides observing for changes in LINQ computation. Implementation and API provided may some differ. It seems my ObservableComputations library covers functionality expected from Bindable LINQ and continuous LINQ and has no problems mentioned in https://stackoverflow.com/a/174924/2663791. That library works with INotifyPropertyChanged and INotifyCollectionChanged interfaces, that makes it possible to operate with ObservableCollection direcly.
Using that library you can code like this:
Please, add ObservableComputations library to the list in the question (after Obtics).