5

有没有人想出一种FREETEXT() CONTAINS()使用标准 LinqToSql 查询语法对任意数量的任意关键字执行全文搜索 () 的好方法?

我显然希望避免使用存储过程或生成动态 SQL 调用。

显然,我可以将搜索字符串输入到使用 FREETEXT() 或 CONTAINS() 的 SPROC 的参数中,但我希望在搜索和构建查询方面更具创造性,例如:

“意大利辣香肠披萨”和汉堡,而不是“苹果派”。

我知道这很疯狂 - 但是能够直接从 LinqToSql 执行此操作不是很好吗?任何有关如何实现这一目标的提示将不胜感激。

更新:我想我可能会在这里做一些事情......

另外:我回滚了对我的问题标题所做的更改,因为它实际上改变了我所问的含义。我知道LinqToSql 不支持全文搜索——如果我想知道的话,我会问这个问题。取而代之的是——我更新了我的标题,以安抚那些喜欢编辑、触发手指的群众。

4

2 回答 2

5

我已经设法通过使用表值函数来封装全文搜索组件来解决这个问题,然后在我的 LINQ 表达式中引用它来保持延迟执行的好处:

string q = query.Query;
IQueryable<Story> stories = ActiveStories
                        .Join(tvf_SearchStories(q), o => o.StoryId, i => i.StoryId, (o,i) => o)
                        .Where (s => (query.CategoryIds.Contains(s.CategoryId)) &&
                                    /* time frame filter */
                                (s.PostedOn >= (query.Start ?? SqlDateTime.MinValue.Value)) &&
                                (s.PostedOn <= (query.End ?? SqlDateTime.MaxValue.Value)));

这里的 'tvf_SearchStories' 是内部使用全文搜索的表值函数

于 2008-12-12T02:05:21.650 回答
4

不幸的是 LINQ to SQL 不支持全文搜索。

我认为有很多产品可以:Lucene.NET、NHibernate Search。NHibernate 的 LINQ 与 NHibernate 搜索相结合可能会提供该功能,但两者仍处于测试阶段。

于 2008-09-15T22:51:15.960 回答