我想将这段代码转换为与QueryOver一起使用
public IList<T> ListByCriteria( ICriteria criteria, int maxResult )
{
IList<T> ret = new List<T>();
using (ITransaction tx = m_session.BeginTransaction(IsolationLevel.ReadCommitted))
{
try
{
ret = criteria
.SetMaxResults( maxResult )
.List<T>();
tx.Commit();
}
finally
{
if (tx.IsActive)
tx.Rollback();
}
}
return ret;
}
类似
public IList<T> ListByQueryOver( Expression<Func<bool>> expression )
{
IList<T> ret = new List<T>();
using (ITransaction tx = m_session.BeginTransaction(IsolationLevel.ReadCommitted))
{
try
{
ret = m_session.QueryOver<T>().Where( expression )
.List<T>();
tx.Commit();
}
finally
{
if (tx.IsActive)
tx.Rollback();
}
}
return ret;
}
但它没有编译。 错误消息指出:“T必须是引用类型才能在QueryOver上将其用作参数'T'”
是否可以将此调用设为通用?
怎么了?
谢谢你,Stefano
答案 0 :(得分:1)
尝试:
public IList<T> ListByQueryOver( Expression<Func<T, bool>> expression ) where T : class, new()
where子句将T限制为引用类型,而new需要类上没有参数的构造函数。 QueryOver Where方法需要`Expression&gt;'参数。