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

时间:2011-09-20 15:39:24

标签: linq contains full-text-search llblgen

[使用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时,它实际上是一个“像'%'%''生成的而不是包含。

在做了一些研究之后,我在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 个答案:

答案 0 :(得分:0)

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

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