В 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);
Я предполагаю, что в настоящее время необходим только очень простой поиск. Кто-нибудь может улучшить это? Можно ли реализовать как метод расширения и избежать оболочки?