将IQueryable <int>与SqlQuery <int>相交

时间:2016-12-20 20:36:22

标签: c# sql-server entity-framework linq-to-entities full-text-search

我正在尝试在旧版文档管理应用程序中组合“常规”搜索和全文搜索。目前他们100%分开。目前,用户可以执行常规搜索,搜索文档上的用户定义索引,或者他们可以执行搜索文档内容的全文搜索。他们不能同时做到并得到综合结果。这就是我想要实现的目标。

使用谓词构建器和Linq To Entities实现常规搜索,以构建EntityFramework中的每个搜索。结果是IQueryable,其中每个int匹配Document表中的主键。

通过生成使用Database.SqlQuery执行的原始SQL来实现全文搜索。 (实体框架不支持v6中的全文)。同样,每个结果int匹配Document表中的主键。

在结果的2个IEnumebles上做一个交叉很容易,但这显然是做了两次单独的搜索。我试图找到一种方法来一次性访问数据库,而不必完全重做当前搜索的工作方式。我已经读过,在不丢失延迟执行的情况下,不可能从SqlQuery转换为IQueryable,但我认为有人可能有其他方式我没有考虑过。感谢。

1 个答案:

答案 0 :(得分:0)

如果必须在一个组合搜索中进行搜索,则必须将Sql Query转换为IQueryable搜索,而实际上需要实现更改。没有其他方法可以将IQueryable和SqlQuery组合在数据库服务器上,除非您从完全搜索中获取结果并将其转换为IQueryable,这仍然是两次单独的数据库访问。