关于NHibernate的QueryOver的一些见解
http://www.cnblogs.com/dddd218/archive/2011/05/11/2043095.html
感谢王老师为我找到此篇文档。如果想了解QueryOver,我想这位强人写得比我好得多,可以参考此文。
http://hi.baidu.com/xiaoyi20056/blog/item/bf181cdfe43e7b0662279879.html
对于将QueryOver和session分离,则可以参考此文。
下面是我在运用QueryOver时的代码:
public class BaseQuery<TEntity, TQuery> : Query<TEntity>
where TEntity : IEntity
where TQuery : BaseQuery<TEntity, TQuery>
{
public QueryOver<TEntity> Query { get; private set; }
public BaseQuery()
{
Query = QueryOver.Of<TEntity>();
}
protected QueryOver<TEntity, TEntity> QueryQuery
{
get { return (QueryOver<TEntity, TEntity>)Query; }
}
public TQuery Paging(int pageIndex, int pageSize)
{
if (pageIndex != 0 && pageSize != 0)
Query
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize);
return (TQuery)this;
}
public TQuery By(Expression<Func<TEntity, bool>> expression)
{
if (expression != null)
QueryQuery.Where(expression);
return (TQuery)this;
}
}
为什么要写Paging和by这两个方法,因为我觉得分页是运用得很多的,而by是封装where方法,使代码更容易理解。
为什么要用到TQuery,因为我想要paging和By的返回值为我想要的Query。
为什么QueryOver<T,T>才能进行表达式构建[即使用where等条件构建],我正在思考这个问题。
ok,去除上面的附加内容,得到下面一个精简版的QueryOver.
public class QueryImplByQueryOver<item> : Query<item>
{
public QueryImplByQueryOver()
{
Query = QueryOver.Of<item>();
}
public QueryOver<item,item> Query { get; private set; }
}
就这么多。