Я пытаюсь реализовать поиск подстановочных знаков Функция (*,?) С использованием LINQ to SQL. На данный момент я хочу попробовать его с помощью регулярного выражения, поскольку код, который мы пишем, будет коротким и легко управляемым. Вот что у меня естьРегулярное выражение с использованием выражений Lambda
string kw=_keyword.Replace("*",".*").Replace("?",".");
var predicate = PredicateBuilder.True<DAL.RequestAttribute>();
Regex reg=new Regex("^"+kw+"$");
predicate=predicate &&(reg.IsMatch(ra=>ra.AttributeValue));
Итак, здесь он дает ошибку компиляции, как «Не удается преобразовать лямбда-выражения к типу„строка“, потому что это не тип делегата»
Хотя некоторые обходные пути, если я это сделать компилировать и запускать, я получаю эту ошибку времени выполнения
«Метод Boolean IsMatch (System.String)» не поддерживает перевод на SQL ».
Итак, у меня есть два вопроса здесь 1. Думаю ли я в правой полосе, чтобы реализовать свой шаблон, используя регулярные выражения? если нет, то это более эффективный способ сделать это? 2. Как устранить эту ошибку.
Благодаря
Подобный метод SQL также не работает, поскольку первая ошибка появляется снова. Вот мой код. Я попробовал строку kw = _keyword.Replace («*», «%»). Замените («?», «_»); var predicate = PredicateBuilder.True(); Regex reg = new Regex ("^" + kw + "$"); predicate = predicate && (System.Data.Linq.SqlClient.SqlMethods.Like ((ra => ra.AttributeValue), kw)); Я получаю ошибку в последней строке, как указано. –
Обновление моего ответа, чтобы прояснить что-то. – ventaur
В более ручной обработке я получил следующий код для строки «*» [] _searchParts = _keyword.Split ('*'); , если (_searchParts.Length == 2) { , если (string.IsNullOrEmpty (_searchParts [0])) { , если (_fieldName == NULL) предикатные = (га => ra.AttributeValue.EndsWith (_searchParts [ 1]) && ra.Attribute.LibID == _libID); else predicate = (ra => ra.AttributeValue.EndsWith (_searchParts [1]) && ra.Attribute.LibID == _libID && ra.Attribute.Name == _fieldName); } Это работает Хорошо, и я использую класс Predicatebuilder на странице http: //www.albahari.com/expressions " –