使用 LLBLGen 时如何在 Linq 查询中进行全文搜索

Posted

技术标签:

【中文标题】使用 LLBLGen 时如何在 Linq 查询中进行全文搜索【英文标题】:How to do a Full-Text search within a Linq query when using LLBLGen 【发布时间】:2011-11-21 05:14:44 【问题描述】:

[将 LLBLGen Pro 3.1 与 Entity Framework 4、.NET 4 和 SQLServer 2005 一起使用]

我有一个包含 .Contain(keyword); 的 linq 查询

    IEnumerable<Product> products = null;
    using (var context = new ModelDataContext())
    
    products = (from product in context.Products where product.Title.Contains(keyword)
     select product);
    

我正在研究查询的性能,发现当生成 SQL 时,它实际上是生成的“like '%keyword%'”而不是包含。

在做了一些研究之后,我在 LLBLGen Pro 文档中发现了一些关于 FunctionMapping 的信息:

http://www.llblgen.com/documentation/2.6/Using%20the%20generated%20code/Linq/gencode_linq_functionmappings.htm

我在我的 sql 数据库上创建了一个表值函数,以及我的项目中所需的类:

    public class CustomDatabaseFunctions


    public static bool FullTextSearch(string fieldToSearch, string toFind)
    
        // empty body, as it's just here to make the query compile. The call is converted to a SQL function.
        return true;
    


public class CustomDatabaseFunctionMappings : FunctionMappingStore 

    public CustomDatabaseFunctionMappings() : base()
    
        this.Add(new FunctionMapping(typeof(CustomDatabaseFunctions),"FullTextSearch",1,"Product_FullTextSearch(0)","ProductDatabase","Resources"));
    

文档的下一部分说明您需要将自定义 FunctionMappingStore 传递给 LinqMetaData。在示例中,这样做如下:

metaData.CustomFunctionMappings = new NorthwindFunctionMappings();
var q = from o in metaData.Order where o.CustomerId == "CHOPS"        
select new  o.OrderId, OrderTotal = NorthwindFunctions.CalculateOrderTotal(o.OrderId, true) ;

我遇到的问题是我正在使用 DataContext 进行 linq 查询,但我不知道变量 metaData 来自哪里或如何使用它!

我会继续寻找是否可以找到,但非常欢迎任何帮助!

【问题讨论】:

【参考方案1】:

您链接到的文档适用于我们的框架,但您说您使用的是 EFv4。所以你应该使用EF的函数映射特性,而不是我们自己的框架;)。也就是说,如果您使用的是 EF,但代码建议您不要使用。所以我很困惑。

最好在我们自己的支持论坛上发布有关 LLBLGen Pro 的问题,因为我们不监控 SO。

【讨论】:

知道这是怎么做到的吗?我花了一些时间搜索,但只能找到“未来”EF 可能能够映射到表值函数这一事实的引用。

以上是关于使用 LLBLGen 时如何在 Linq 查询中进行全文搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何在构建 XDocument 时执行 LINQ 查询?

内部连接使用LLBLGen?

当元素的名称中有冒号时,如何使用 LINQ 查询 XDocument?

我们如何在 Cassandra 中进行空间查询? Cassandra 是不是有任何 GIS 扩展?

如何在 SQL Server 中进行包含字符串每个单词的搜索查询?

如何使用 LINQ 将表列查询到数组中