我有一个LINQ-2实体查询生成器,根据相当复杂的搜索表单嵌套不同类型的Where子句。到目前为止效果很好。
现在,我需要在一些查询中使用Server全文搜索索引。是否有机会直接将搜索词添加到LINQ查询中,并将分数作为可选属性使用?
如果没有,我可以编写一个存储过程来加载与全文搜索条件匹配的所有行in的列表,然后使用LINQ-2实体查询加载详细数据,并计算每一行循环中的其他可选筛选条件。当然,这将是一个非常糟糕的想法--从性能上讲。
另一个选项是使用存储过程将匹配全文搜索的所有行ID插入到临时表中,然后让LINQ查询加入临时表。问题是:如何在LINQ查询中加入临时表,因为它不能成为实体模型的一部分?
发布于 2009-09-18 14:22:18
我想我可能会建议一种混合的方法。
示例查询:
var q = from r in Context.SearchFor("searchText")
let fooInstance = (r.ResultType == "Foo")
? Context.Foos.Where(f => f.Id == r.Id)
: null
where ((fooInstance == null) || (fooInstance.SpecialCriterion == r.SpecialCriterion))
select {
// ...这是我的头等大事,所以语法可能不对。重要的一点是将搜索结果视为一个实体。
另外:使用更灵活的FTS系统,在建立索引时可以进行“特殊”、每种类型的过滤。
发布于 2011-05-25 19:09:36
我见过EF4的这样的代码:
var query = context.ExecuteStoreQuery<Person>(
"SELECT * FROM People WHERE FREETEXT(*,{0})",
searchText
).AsQueryable();在某些情况下,这可能比创建存储的proc或UDP更简单。
https://stackoverflow.com/questions/1444746
复制相似问题