首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架、全文搜索和临时表

实体框架、全文搜索和临时表
EN

Stack Overflow用户
提问于 2009-09-18 14:03:46
回答 2查看 3.3K关注 0票数 4

我有一个LINQ-2实体查询生成器,根据相当复杂的搜索表单嵌套不同类型的Where子句。到目前为止效果很好。

现在,我需要在一些查询中使用Server全文搜索索引。是否有机会直接将搜索词添加到LINQ查询中,并将分数作为可选属性使用?

如果没有,我可以编写一个存储过程来加载与全文搜索条件匹配的所有行in的列表,然后使用LINQ-2实体查询加载详细数据,并计算每一行循环中的其他可选筛选条件。当然,这将是一个非常糟糕的想法--从性能上讲。

另一个选项是使用存储过程将匹配全文搜索的所有行ID插入到临时表中,然后让LINQ查询加入临时表。问题是:如何在LINQ查询中加入临时表,因为它不能成为实体模型的一部分?

EN

回答 2

Stack Overflow用户

发布于 2009-09-18 14:22:18

我想我可能会建议一种混合的方法。

  1. 编写一个存储过程,它返回所需的所有信息。
  2. 映射一个实体到结果。可以为此目的创建实体。或者,使用实体框架的版本4,它允许映射复杂类型来启动过程结果。关键是,与其试图将过程结果强制到现有的实体类型,不如将它们作为自己的类型来处理。
  3. 现在您可以构建一个LINQ实体查询.

示例查询:

代码语言:javascript
复制
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系统,在建立索引时可以进行“特殊”、每种类型的过滤。

票数 2
EN

Stack Overflow用户

发布于 2011-05-25 19:09:36

我见过EF4的这样的代码:

代码语言:javascript
复制
var query = context.ExecuteStoreQuery<Person>(
        "SELECT * FROM People WHERE FREETEXT(*,{0})", 
        searchText
    ).AsQueryable();

在某些情况下,这可能比创建存储的proc或UDP更简单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1444746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档