中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

MongoDB學習筆(bi)記~為IMongoRepository接(jie)口添加了排序和(he)表達(da)式樹,針對官方驅動

回到目錄

MongoDB的官方(fang)驅(qu)動,語(yu)法更好,更強

之前寫過關于IMongoRepository倉儲的文章,在mongodb的驅動選擇上使(shi)用(yong)(yong)了(le)(le)(le)NoRM,但(dan)是進行$ref引用(yong)(yong)類(lei)型(xing)導(dao)航時(shi)出現了(le)(le)(le)問題(ti),它(ta)對引用(yong)(yong)類(lei)型(xing)屬(shu)性支持(chi)不是很好,還是使(shi)用(yong)(yong)幾(ji)年前的泛型(xing)技術而沒有使(shi)用(yong)(yong)Attribute,在這個方(fang)(fang)面(mian)官(guan)方(fang)(fang)驅動做的更(geng)好,所(suo)以,我還是使(shi)用(yong)(yong)官(guan)方(fang)(fang)驅動又實現了(le)(le)(le)一(yi)(yi)次(ci)IMongoRepository,把一(yi)(yi)些(xie)實現的細節封(feng)裝在了(le)(le)(le)底層(ceng),我們叫這個官(guan)方(fang)(fang)倉儲為(wei)MongoOfficialRepository,呵(he)呵(he),誰叫你來的晚呢,MongoRepository已經為(wei)NoRM占(zhan)上了(le)(le)(le),呵(he)呵(he)。

新(xin)的IMongoRepository接口內容添加了4個方(fang)法

        /// <summary>
        /// 官(guan)方(fang)驅動,返(fan)回(hui)帶分頁的結果(guo)集
        /// </summary>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        PagedResult<TEntity> GetModel(int pageIndex, int pageSize);

        /// <summary>
        /// 官方驅動,返(fan)回帶條件和分頁的結果集
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        PagedResult<TEntity> GetModel(Expression<Func<TEntity, bool>> expression, int pageIndex, int pageSize);

        /// <summary>
        /// 官方驅動,返(fan)回帶排序和(he)分頁(ye)的結果集
        /// </summary>
        /// <param name="fields"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        PagedResult<TEntity> GetModel(Dictionary<Expression<Func<TEntity, object>>, bool> fields, int pageIndex, int pageSize);

        /// <summary>
        /// 官方(fang)驅動(dong),返回(hui)帶(dai)條件(jian)和排序及分(fen)頁的(de)結果集
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="fields"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        PagedResult<TEntity> GetModel(Expression<Func<TEntity, bool>> expression, Dictionary<Expression<Func<TEntity, object>>, bool> fields, int pageIndex, int pageSize);

對這四大(da)方(fang)法的實現,為(wei)了不(bu)讓(rang)MongoDB的更(geng)多細節公開,所以,更(geng)多的內核只(zhi)能在倉(cang)儲中實現了,呵呵

        public PagedResult<TEntity> GetModel(int pageIndex, int pageSize)
        {
            return GetModel(i => true, pageIndex, pageSize);
        }

        public PagedResult<TEntity> GetModel(Expression<Func<TEntity, bool>> expression, int pageIndex, int pageSize)
        {
            return GetModel(expression, new Dictionary<Expression<Func<TEntity, object>>, bool>(), pageIndex, pageSize);
        }

        public PagedResult<TEntity> GetModel(
            Dictionary<Expression<Func<TEntity, object>>, bool> fields,
            int pageIndex,
            int pageSize)
        {
            return GetModel(i => true, fields, pageIndex, pageSize);
        }

        public PagedResult<TEntity> GetModel(
            Expression<Func<TEntity, bool>> expression,
            Dictionary<Expression<Func<TEntity, object>>, bool> fields,
            int pageIndex,
            int pageSize)
        {

            SortDefinition<TEntity> sorts = new ObjectSortDefinition<TEntity>(new { });
            foreach (var item in fields)
            {
                if (item.Value)
                    sorts = sorts.Ascending(item.Key);
                else
                    sorts = sorts.Descending(item.Key);
            }
            var skip = (pageIndex - 1) * pageSize;
            var limit = pageSize;
            var recordCount = _table.CountAsync<TEntity>(i => true).Result;
            return new PagedResult<TEntity>(
                recordCount,
                (int)(recordCount + pageSize - 1) / pageSize,
                pageSize,
                pageIndex,
                _table.Find(expression)
                      .Sort(sorts)
                      .Skip(skip)
                      .Limit(limit)
                      .ToListAsync().Result);
        }

OK,現(xian)在你可以在業務層去調(diao)用它(ta)了(le),基本上面(mian)四個方法可以滿(man)足你的一(yi)切需求了(le),呵呵!

看下在UI層對它(ta)的調用,本DEMO沒有(you)BLL層,呵(he)(he)呵(he)(he)

    public ActionResult Index(int? loginNameSort, int? realNameSort, int page = 1)
        {
            Dictionary<Expression<Func<WebManageUsers, object>>, bool> sortList = 
new System.Collections.Generic.Dictionary<Expression<Func<WebManageUsers, object>>, bool>(); if (loginNameSort.HasValue)  sortList.Add(i => i.LoginName, loginNameSort.Value == 0); if (realNameSort.HasValue)  sortList.Add(i => i.RealName, realNameSort.Value == 0); var model = _webManageUsersRepository.GetModel(sortList, page, 10); return View(model); }

 

 

怎么樣(yang),看了(le)上面代(dai)碼是(shi)否心里(li)癢(yang)癢(yang)了(le),哈哈,趕快去開發你自己的MongoDB倉儲吧!

回到目錄

posted @ 2015-04-27 22:11  張占嶺  閱讀(6430)  評論(2)    收藏  舉報