实体框架、全文搜索和临时表
我有一个 LINQ-2-Entity 查询构建器,根据相当复杂的搜索表单嵌套不同类型的Where 子句。到目前为止效果很好。
现在我需要在一些查询中使用 SQL Server 全文搜索索引。是否有机会将搜索项直接添加到 LINQ 查询中,并将分数作为可选属性提供?
如果没有,我可以编写一个存储过程来加载与全文搜索条件匹配的所有行 ID 的列表,然后使用 LINQ-2-Entity 查询加载详细数据并评估其他可选过滤条件每行一个循环。从性能角度来看,这当然是一个非常糟糕的主意。
另一种选择是使用存储过程将与全文搜索匹配的所有行 ID 插入到临时表中,然后让 LINQ 查询连接临时表。问题是:如何在 LINQ 查询中连接临时表,因为它不能是实体模型的一部分?
I have a LINQ-2-Entity query builder, nesting different kinds of Where clauses depending on a fairly complex search form. Works great so far.
Now I need to use a SQL Server fulltext search index in some of my queries. Is there any chance to add the search term directly to the LINQ query, and have the score available as a selectable property?
If not, I could write a stored procedure to load a list of all row IDs matching the full-text search criteria, and then use a LINQ-2-Entity query to load the detail data and evaluate other optional filter criteria in a loop per row. That would be of course a very bad idea performance-wise.
Another option would be to use a stored procedure to insert all row IDs matching the full-text search into a temporary table, and then let the LINQ query join the temporary table. Question is: how to join a temporary table in a LINQ query, as it cannot be part of the entity model?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想我可能会建议采用混合方法。
示例查询:
这超出了我的想象,因此语法可能不正确。重要的一点是将搜索结果视为一个实体。
或者:使用更灵活的 FTS 系统,该系统可以在构建索引时执行“特殊”的按类型过滤。
I think I would probably suggest a hybrid approach.
Sample query:
This is off the top of my head, so the syntax might not be right. The important point is treating search results as an entity.
Alternately: Use a more flexible FTS system, which can do the "special", per-type filtering when building the index.
我见过这样的 EF4 代码:
在某些情况下,这可能比创建存储过程或 UDP 更简单。
I've seen code like this for EF4:
This may be simpler than creating a stored proc or UDP in some cases.