Linq没有内置的全文搜索,似乎没有很多关于这个问题的帖子,所以我玩了一个玩,并提出了这个方法为我的utlity类:
public static IEnumerable<TSource> GenericFullTextSearch<TSource>(string text,MyDataContext context) { //Find LINQ Table attribute object[] info = typeof(TSource).GetCustomAttributes(typeof(System.Data.Linq.Mapping.TableAttribute),true); //Get table name String table = (info[0] as System.Data.Linq.Mapping.TableAttribute).Name; //Full text search on that table return context.ExecuteQuery<TSource>(String.Concat("SELECT * FROM ",table," WHERE CONTAINS(*,{0})"),text); }
并将这个包装器添加到每个部分Linq类,其中有一个全文索引
public static IEnumerable<Pet> FullTextSearch(string text,MyDataContext context) { return (LinqUtilities.GenericFullTextSearch<Pet>(text,context) as IEnumerable<Pet>); }
所以现在我可以用整齐的东西做全文搜索
var Pets = Pet.FullTextSearch(helloimatextbox.Text,MyDataContext).Skip(10).Take(10);
我假设目前只需要非常基本的搜索。任何人都可以改进吗?是否可以实现一个扩展方法并避免包装?
解决方法
最简单的解决方案是在sql中使用内联表值函数,并将其添加到模型中
http://sqlblogcasts.com/blogs/simons/archive/2008/12/18/LINQ-to-SQL—Enabling-Fulltext-searching.aspx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。