1

ServiceStack.OrmLite를 사용하여 INT 열의 SQL LIKE 비교를 원합니다.OrmLite에서 INT 열에 대한 비교를 수행 하시겠습니까?

where intColumn like '%123%'

내가 strings.Contains()하지만 내 재산/열이 int입니다 사용할 수 있습니다 알고 : 기본적으로 나는 절은 다음과 같은 SQL을 생성하는 OrmLite이 필요합니다.

System.NotSupportedException: Specified method is not supported. 
at ServiceStack.OrmLite.SqlExpression`1.VisitColumnAccessMethod(MethodCallExpression m) 
    at ServiceStack.OrmLite.SqlExpression`1.VisitMethodCall(MethodCallExpression m) 
    at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp) 
    at ServiceStack.OrmLite.SqlExpression`1.VisitColumnAccessMethod(MethodCallExpression m) 
    at ServiceStack.OrmLite.SqlExpression`1.VisitMethodCall(MethodCallExpression m) 
    at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp) 
    at ServiceStack.OrmLite.SqlExpression`1.VisitLambda(LambdaExpression lambda) 
    at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp) 
    at ServiceStack.OrmLite.SqlExpression`1.AppendToWhere(String condition, Expression predicate) 
    at ServiceStack.OrmLite.SqlExpression`1.Where(Expression`1 predicate) 

어떤 아이디어 : 또한 다음과 같은 예외를 던지고있다 int 재산에 .ToString().Contains()을 사용하고 계십니까?

+1

'CAST (intColumn은 VARCHAR (100) AS) '% 123퍼센트'등'M.Ali @ –

+0

나는 질문을 수정 한 경우 더 분명하게. 나는 SQL 자체가 아닌 OrmLite를 사용하여 이것을 할 필요가있다. SQL Server에서는'% 123 % '와 같은 intColumn이 정상적으로 작동합니다. – kaptan

답변

3

당신은 단지 사용자 정의 SQL을 추가 할 수 있어야 어디 조건 :

var results = db.From<Table>(q => q.Where("intColumn like '%123%'")); 
+0

나는 커스텀 SQL을 멀리하고 싶다. 이 기능을 구현하는 것이 좋을 것이라고 생각합니다. 가능성이 높다고 생각하십니까 :)? – kaptan

+0

새로운 기능이란 '캐스팅'기능을 사용하여 'q.Where (x => x.IntColumn.ToString(). Contains ("123"))'를'cast'(intColumn as varchar)와 같이 변환하는 것입니다. '% 123 %'. – kaptan

+0

@kaptan SqlExpressions가 이것을 지원하기 위해 리팩터링 될 가능성은 희박합니다 : 보지 않거나 사용되지 않았지만 사용법이 무엇이며 생성해야하는 SQL은 명확하지 않습니다. 기본적으로 사용자 지정 SQL 조건에 대한 고전적인 사례입니다. 또 다른 옵션은 밑에있는'q.Where (sql) '에 위임하는 자신 만의 SqlExpression Extension 메소드 뒤에 이것을 감쌀 수 있습니다. – mythz