[将 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 的信息:
我在我的 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 来自哪里或如何使用它!
我会继续寻找,看看我是否能找到,但非常欢迎任何帮助!