使用 LLBLGen 时如何在 Linq 查询中进行全文搜索
Posted
技术标签:
【中文标题】使用 LLBLGen 时如何在 Linq 查询中进行全文搜索【英文标题】:How to do a Full-Text search within a Linq query when using LLBLGen 【发布时间】:2011-11-21 05:14:44 【问题描述】:[将 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 来自哪里或如何使用它!
我会继续寻找是否可以找到,但非常欢迎任何帮助!
【问题讨论】:
【参考方案1】:您链接到的文档适用于我们的框架,但您说您使用的是 EFv4。所以你应该使用EF的函数映射特性,而不是我们自己的框架;)。也就是说,如果您使用的是 EF,但代码建议您不要使用。所以我很困惑。
最好在我们自己的支持论坛上发布有关 LLBLGen Pro 的问题,因为我们不监控 SO。
【讨论】:
知道这是怎么做到的吗?我花了一些时间搜索,但只能找到“未来”EF 可能能够映射到表值函数这一事实的引用。以上是关于使用 LLBLGen 时如何在 Linq 查询中进行全文搜索的主要内容,如果未能解决你的问题,请参考以下文章
当元素的名称中有冒号时,如何使用 LINQ 查询 XDocument?
我们如何在 Cassandra 中进行空间查询? Cassandra 是不是有任何 GIS 扩展?