0

[将 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 来自哪里或如何使用它!

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

4

1 回答 1

0

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

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

于 2011-09-20T21:04:16.847 回答