NHibernate - Criteria API를 사용하여 정수 열에 대해 LIKE 검색을 수행하는 가장 쉬운 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1231054

  •  22-07-2019
  •  | 
  •  

문제

정수 열에 대해 유사 검색을 수행하려고 하는데 실제로 해야 할 일은 열을 varchar로 캐스팅한 다음 유사 검색을 수행하는 것입니다.이것이 가능한가?Criteria API를 사용하여 이를 수행하는 가장 쉬운 방법은 무엇입니까?

var search = "123";
criteria.Add(Restrictions.Like("Number", "%" + search + "%"))
도움이 되었습니까?

해결책

Number가 문자열이라면 다음과 같이 쉽습니다.

.Add(Restrictions.Like("Number", "some_value",MatchMode.Anywhere))

숫자가 있으므로 NHibernate는 숫자 유형을 확인하고 문자열을 제공하면 예외가 발생합니다.

NH 팀이 왜 객체를 매개변수로 하고 MatchMode 매개변수를 갖는 오버로드를 제공하지 않았는지 잘 모르겠습니다.

어쨌든 다음과 같이 할 수 있습니다.

.Add(Expression.Sql("{alias}.Number like ?", "%2%", NHibernateUtil.String))

편집하다

별칭 정보:

(문서에서 이에 대해 설명하는 곳을 찾을 수 없지만 이에 대한 나의 이해는 다음과 같습니다.)

{alias}는 가장 최근의 CreateCriteria에 대해 NH 내부에서 사용된 별칭을 반환합니다.그래서 당신이 가지고 있다면 :

session.CreateCriteria<User>("firstAlias")
       .CreateCriteria("firstAlias.Document", "doc")
       .Add(Expression.Sql("{alias}.Number like ?", "%2%",  
                           NHibernateUtil.String)).List<User>();

이 경우 {alias}는 'doc'가 됩니다. 따라서 다음과 같이 끝납니다.문서.번호 .

따라서 별칭을 사용해야 하는 CreateCriteria 뒤에는 항상 {alias}를 사용하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top