C# 将代码从NHibernate2.x转换为3.x
我正在玩NHibernate,并试图使用它创建一个通用的C# 将代码从NHibernate2.x转换为3.x,c#,linq,nhibernate,C#,Linq,Nhibernate,我正在玩NHibernate,并试图使用它创建一个通用的存储库。 本文使用的是NHibernate2.x,我使用的是3.x版本。 我想转换以下代码,但我想验证执行是否保持不变。 原始代码 public IList<T> GetListBy<T>(Expression<Func<T, bool>> query = null) { return InnerSession.Linq<T>().Where(query).ToList()
存储库。
本文使用的是NHibernate2.x,我使用的是3.x版本。
我想转换以下代码,但我想验证执行是否保持不变。
原始代码
public IList<T> GetListBy<T>(Expression<Func<T, bool>> query = null)
{
return InnerSession.Linq<T>().Where(query).ToList();
}
公共IList GetListBy(表达式查询=null)
{
返回InnerSession.Linq().Where(query.ToList();
}
转换代码
public T GetItemBy<T>(Expression<Func<T, bool>> query) where T : class
{
return (T)InnerSession.QueryOver<T>().Where(query); //.SingleOrDefault(query);
}
public T GetItemBy(表达式查询),其中T:class
{
return(T)InnerSession.QueryOver().Where(query);/.SingleOrDefault(query);
}
这是正确的转换吗 如果要使用LINQ,正确的转换是:
return InnerSession.Query<T>().Where(query).ToList();
返回InnerSession.Query().Where(Query.ToList();
Query()
是另一个命名空间(NHibernate.Linq)中的扩展方法。如果不需要Linq,QueryOver可以正常工作。但是您应该添加List()
方法来执行查询<代码>返回(T)InnerSession.QueryOver().Where(query.List()代码>谢谢。你帮了大忙。