【问题标题】:Intersect an IQueryable<int> with a SqlQuery<int>将 IQueryable<int> 与 SqlQuery<int> 相交
【发布时间】:2016-12-20 20:36:21
【问题描述】:

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

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

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

只需对生成的 2 个 IEnumerables 进行相交就很容易了,但这显然是在进行 2 次单独的搜索。我试图找出一种方法来一次访问数据库,而不必完全重做搜索当前的工作方式。我已经读到不可能在不丢失延迟执行的情况下从 SqlQuery 转换为 IQueryable ,但我认为有人可能有另一种我没有考虑过的方式。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-07
      • 2019-12-29
      • 2017-04-17
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 2020-04-11
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多