2014-05-22 62 views
0

這是我的代碼:如何使用Nhibernate標準比較datepart月份?

public IList<VotacaoPlenario> RetornarVotacao(int mesInicio, int anoInicio) 
    { 
     DetachedCriteria criteria = DetachedCriteria.For<VotacaoPlenario>(); 

     if (anoInicio > 0) 
     { 
      criteria.Add(Expression.Eq("YEAR(Data)", anoInicio)); 

     } 

     IList<VotacaoPlenario> votacao = criteria.GetExecutableCriteria(Session).List<VotacaoPlenario>(); 


     return votacao; 
    } 
} 

在我的桌子去字段數據Datime我是需要與可變anoInicio比較其數據類型爲int我怎樣才能做到這一點?

+0

這個答案可能是有用的SQL:http://stackoverflow.com/a/10932268/507793 – Matthew

+0

不適合我的情況 –

+0

我需要更改表日期 –

回答

2

該解決方案在這裏可以使用SQL投影:

var monthProjection = Projections 
    .SqlProjection(" MONTH(Data) as month " // the left side of the expression 
        , new[] {"month"}   // alias 
        , new IType[] {NHibernateUtil.Int32}); // type is int 

criteria.Add(Expression.Eq(monthProjection, anoInicio)); 

,併產生看起來像這樣

MONTH(Date) = @p1 //where p1 param is anaInicio 
+0

NHibernate.Transform不是。在我的版本是NHibernate.Util –

+0

* NHibernateUtil *住在根名稱空間'NHibernate.NHibernateUtil'中。 'Transformer'命名空間不適用於限制(在我們的例子中),而是用於實體轉換的最終SELECT子句*(主要用於投影)* –