C# 如何使用Nhibernate标准比较datepart月?

C# 如何使用Nhibernate标准比较datepart月?,c#,nhibernate,criteria,C#,Nhibernate,Criteria,这是我的代码: public IList<VotacaoPlenario> RetornarVotacao(int mesInicio, int anoInicio) { DetachedCriteria criteria = DetachedCriteria.For<VotacaoPlenario>(); if (anoInicio > 0) { criteria.Add(E

这是我的代码:

   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;
    }
}
Narvotaco公共图书馆(国际梅西尼西奥、国际阿诺尼西奥)
{
DetachedCriteria=DetachedCriteria.For();
如果(异常>0)
{ 
添加(表达式.Eq(“年份(数据)”,anoInicio));
}
IList votacao=criteria.GetExecutableCriteria(Session.List();
返回沃塔考;
}
}

在我的表中,de字段数据是Datime,我需要与变量anoInicio进行比较,该变量是int,如何进行比较?

这里的解决方案可能是使用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));
生成的SQL如下所示

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

这个答案可能很有用:不适合我的情况我需要更改表日期也不需要NHibernate.Transform。在我的版本中是NHibernate.util,NHibernateUtil位于根命名空间
NHibernate.NHibernateUtil
Transformer
名称空间不是用于限制(如我们的例子),而是用于最终的SELECT子句到实体的转换(主要用于投影)