可绑定LINQ和连续LINQ的主要区别是什么?
·可绑定LINQ: www.codeplex.com/bindablelinq
·连续LINQ: www.codeplex.com/clinq
根据提供的反馈,又添加了一个项目:
·对象: obtics.codeplex.com
发布于 2008-10-06 16:05:26
这两个包都试图解决两个问题:缺少CollectionChanged事件和动态结果集。有一个额外的问题可绑定解决,额外的自动事件触发器。
两个包都要解决的第一个问题是:
LINQ查询返回的
对象不提供CollectionChanged事件。
Continuous LINQ会自动对所有查询执行此操作,无需更改:
from item in theSource select item ;当您将.asBindable添加到查询源对象时,Bindable LINQ会执行此操作:
from item in theSource.AsBindable() select item ;两个包都要解决的第二个问题是:
从LINQ查询返回的
结果集是静态的。
通常,当您执行LINQ查询时,您的结果集将保持不变,直到您执行新的查询。使用这两个包,每当更新源代码时,您的结果集都会更新。(对性能不好,对实时更新有好处)
示例
var theSource = new ContinuousCollection<Customer>();
var theResultSet = from item in theSource where item.Age > 25 select item;
//theResultSet.Count would equal 0.因为您使用的是可绑定的或连续的LINQ,所以您可以修改theSource,而theResultSet将自动包含新的项。
theSource.Add(new Customer("Bob", "Barker" , 35, Gender.Male)); //Age == 35
//theResultSet.Count would now equal 1.Bindable LINQ提供的额外问题:(直接引用他们自己的页面)
contactsListBox.ItemsSource = from c in customers
where c.Name.StartsWith(textBox1.Text)
select c;Bindable LINQ将检测到查询依赖于TextBox对象textBox1的Text属性。由于TextBox是WPF控件,因此Bindable LINQ知道订阅该控件上的TextChanged事件。
最终结果是,当用户键入时,查询中的项将被重新评估,并且更改将显示在屏幕上。不需要额外的代码来处理事件。
发布于 2009-03-03 14:26:58
我可以请您注意另一个codeplex项目吗?它被称为Obtics,并处理相同的问题(http://obtics.codeplex.com)。
它解决了第一个、第二个和额外的问题,并将反应性带到了一个非常深的水平(有一个基于LINQ的光线跟踪器的演示)。
它声称完全支持Enumerable类的所有LINQ语句和方法。
它使用另一种机制来创建实时查询:
var theResultSet = ExpressionObserver.Execute(
() => from item in theSource where item.Age > 25 select item
).Cascade();发布于 2008-12-11 19:45:26
另一件要记住的事情是,尽管BindableLinq需要在LINQ语句中调用".AsBindable()“,但是CLINQ要求您使用ContinuousCollection而不是ObservableCollection。在简要地看了这两种方法之后,我想我将使用bindable LINQ。
https://stackoverflow.com/questions/167622
复制相似问题