2010-06-21 51 views
0

好吧,我已经有了一个ListView,其中有许多可用的项目(虚拟化模式)。 ListView正上方是一个文本框,允许用户键入任何搜索词并且ListView将被实时过滤。 ListView当前绑定到一个DataSet像这样:使用Lucene命中过滤数据集绑定到WPF C#中的ListView?

SoundListView.DataContext = DS.Tables[0].DefaultView; 

DataSet正在从内部SQLite数据库中提取。

这里是当前过滤器的代码,需要在搜索框中的文本过滤的ListView:

DS.Tables[0].DefaultView.RowFilter = String.Format("path LIKE '%{0}%'", EscapeLikeValue(SearchTextBox.Text)); 

您可以在这里看到我使用的是蹩脚的LIKE SQL修改筛选我的项目基础上,重点项。这很糟糕,因为LIKE不是全文搜索IMO的替代品。为了解决这个问题,我实现了Lucence.NET。

使用Lucene,我正在从文本框中搜索术语,它正在执行一个更具谷歌风格的搜索,在那里我可以使用布尔运算符并进行模糊匹配和酷类似的事情。此搜索目前正在运行! Lucene搜索返回一个ID列表,这些ID与DataSet中提供ListView的ID相对应。

因此,我的最后一块难题是让这些Lucene搜索点击过滤ListView。我应该使用的RowFilter和concanenate所有匹配像一些可怕的SQL线,该ID的:

... RowFilter = "id = 1 OR id = 3 OR id = 7" 

还是有更好的方式来做到这一点?

回答