[使用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的一些信息:
我在我的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来自何处或如何使用它!
我会继续寻找能否找到答案,但非常欢迎任何帮助!
答案 0 :(得分:0)
您链接的文档适用于我们的框架,但您说您正在使用EFv4。所以你应该使用EF的函数映射功能,而不是我们自己的框架;)。也就是说,如果您使用的是EF,但代码建议您不要使用EF。所以我很困惑。
最好在我们自己的支持论坛上发布有关LLBLGen Pro的问题,因为我们不监控SO。