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