데이터베이스에 다른 종류의 데이터 유형을 저장하기 위해 문자열을 사용하는 실험을하고 있습니다. 쿼리를 수행 할 때 쿼리 자체에서 문자열을 올바른 형식으로 캐스팅해야합니다. NHibernate와 닷넷을 사용하고 있으며,이 기능이 있음을 알게 된 것을 기쁘게 생각합니다.Projections.Cast to DateTime을 사용하는 NHibernate 쿼리
public class Foo
{
public string Text { get; set; }
}
내가 성공적으로 숫자 값, 예를 들어,에 캐스팅 Projections.Cast를 사용 :이 간단한 클래스를 사용하고 있는데 예를 들어
다음 쿼리는 1-10 사이의 정수로 저장된 모든 Foos를 올바르게 반환합니다.var result = Session.CreateCriteria<Foo>()
.Add(Restrictions.Between(Projections.Cast(NHibernateUtil.Int32, Projections.Property("Text")), 1, 10))
.List<Foo>();
이제 DateTime으로 이것을 사용하려고하면 어떤 시도를하든 상관 없습니다. 왜?! Projections.Cast
는 DB에서 실행하기 때문에
var date = new DateTime(2010, 5, 21, 11, 30, 00);
AddFooToDb(new Foo { Text = date.ToString() }); // Will add it to the database...
var result = Session
.CreateCriteria<Foo>()
.Add(Restrictions.Eq(Projections.Cast(NHibernateUtil.DateTime, Projections.Property("Text")), date))
.List<Foo>();
날짜 형식입니까? 날짜 형식을 지정해보십시오 .String()을 "dd MMMM yyyy"로 설정하고보십시오. 확실하지 않다. 나는 생각하지 않았다. 그냥 생각해 보자. –
쿼리하기 전에 캐스팅해야한다면 엉덩이에 큰 고통이 될 것이다. 정말 필요한 경우 실제 유형을 저장하는 열을 추가하는 것이 좋습니다. 그렇게하면 캐스트가 작동하는지 확인할 수 있습니다. – dotjoe
타입을 알고있는 캐스트가 어떻게 작동하는지 어떻게 설명 할 수 있겠습니까? 그 타입을 알게 될테니까. – stiank81