[Использование LLBLGen Pro 3.1 с Entity Framework 4, .NET 4 и SQLServer 2005]
У меня есть запрос linq, который включает .Contain (ключевое слово);
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) };
Проблема, с которой я столкнулся, заключается в том, что я выполняю свой запрос linq с использованием DataContext, и я понятия не имею, откуда берется переменная metaData или как ее использовать.это!
Я буду продолжать искать, смогу ли я узнать, но любая помощь очень приветствуется!