在Linq中没有内置全文搜索,并且似乎没有很多关于这个主题的帖子所以我有一个游戏并为我的utleity类提出了这个方法:
public static IEnumerableGenericFullTextSearch (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 (String.Concat("SELECT * FROM ", table, " WHERE CONTAINS(*, {0})"), text); }
并将此包装器添加到每个部分Linq类,其中有一个全文索引
public static IEnumerableFullTextSearch(string text, MyDataContext context) { return (LinqUtilities.GenericFullTextSearch (text, context) as IEnumerable ); }
所以现在我可以用简洁的东西做全文搜索
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