关于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; }
    }

就这么多。

posted @ 2011-10-01 10:51  半日闲  阅读(1828)  评论(0编辑  收藏  举报