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子句到实体的转换(主要用于投影)