LINQ to SQL을 사용하여 (*,?) 와일드 카드 검색 Functionlity를 구현하려고합니다. 현재 우리가 작성한 코드는 짧고 쉽게 관리 할 수 있으므로 정규 표현식을 사용하여 시험해보고 싶습니다. 여기에 지금람다 식을 사용한 정규 표현식 일치
string kw=_keyword.Replace("*",".*").Replace("?",".");
var predicate = PredicateBuilder.True<DAL.RequestAttribute>();
Regex reg=new Regex("^"+kw+"$");
predicate=predicate &&(reg.IsMatch(ra=>ra.AttributeValue));
이 무엇인가, 여기가 내가 그것을 할 경우 몇 가지 해결 방법 비록
"그것은 대리자 형식이 아니기 때문에 '문자열을'입력 람다 식을 변환 할 수 없습니다"로 컴파일 오류를 제공합니다 컴파일하고 실행하면이 런타임 오류가 발생합니다.
"방법 '부울 IsMatch (System.String)'에 SQL에 대한 변환이 지원되지 않습니다."
그래서 여기에 두 개의 질문이 있습니다. 1. 정규식을 사용하여 와일드 카드를 구현하기 위해 오른쪽 차선에서 생각하고 있습니까? 그렇지 않다면, 어떤 방법이 더 효율적입니까? 2.이 오류를 해결하는 방법.
감사
첫 번째 오류가 다시 나타나기 때문에이 SQL과 같은 방법도 작동하지 않습니다. 여기에 문자열 kw = _keyword.Replace ("*", "%")를 시도한 코드가 있습니다. Replace ("?", "_"); var predicate = PredicateBuilder.True(); Regex reg = new Regex ("^"+ kw + "$"); 술어 = 술어 && (System.Data.Linq.SqlClient.SqlMethods.Like ((ra => ra.AttributeValue), kw)); 내가 말한대로 마지막 줄에 오류가 발생합니다 ... –
뭔가 명확하게 내 대답을 업데이 트하십시오. – ventaur
더 수동 처리에서 "*"문자열 []에 대해 다음과 같은 코드가 있습니다. [] _searchParts = _keyword.Split ('*'); 경우 (_searchParts.Length == 2) { 경우 (string.IsNullOrEmpty (_searchParts [0])) { 경우 (_fieldName == NULL) 술어 = (RA => ra.AttributeValue.EndsWith (_searchParts [ 1]) && ra.Attribute.LibID == _libID); else 술어 = (ra => ra.AttributeValue.EndsWith (_searchParts [1]) && ra.Attribute.LibID == _libID && ra.Attribute.Name == _fieldName); }이 작동합니다. 그리고 "http : //www.albahari"에서 Predicatebuilder 클래스를 사용하고 있습니다.com/expressions " –