<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MongoDB學習筆記~以匿名對象做為查詢參數,方便查詢子對象

      回到目錄

      對于MongoDB的封裝還在繼續,對于不斷追求簡單的編程還在繼續,對于喜歡代碼的那么感覺,還在繼續...

      當你的mongo數據表里有子對象時,尤其是列表對象時,使用官方的驅動很是不爽,要記得很多新的對象類型,麻煩,所以,將它進行封裝,讓GetModel支持匿名參數!

      表結構可能是這樣

      希望查詢的語句變成這樣

      看了上面的語句感覺挺酷吧,呵呵,下面看一下實現的代碼,今天下午寫的,呵呵!

        public IEnumerable<TEntity> GetModel<U>(U template)
              {
                  return _table.Find(GeneratorMongoQuery(template)).ToListAsync().Result;
              }
      
              public PagedResult<TEntity> GetModel<U>(int pageIndex, int pageSize)
              {
                  return this.GetModel(new { }, pageIndex, pageSize);
      
              }
      
              public PagedResult<TEntity> GetModel<U>(U template, int pageIndex, int pageSize)
              {
                  return this.GetModel(template, new { }, pageIndex, pageSize);
              }
      
              public PagedResult<TEntity> GetModel<U, O>(U template, O orderby, int pageIndex, int pageSize)
              {
                  #region 條件過濾
                  BsonDocumentFilterDefinition<TEntity> filterDefinition = GeneratorMongoQuery(template);
                  #endregion
      
                  #region 排序處理
                  SortDefinition<TEntity> sorts = new ObjectSortDefinition<TEntity>(new { });
                  foreach (var item in typeof(O).GetProperties())
                  {
                      if ((OrderType)item.GetValue(orderby) == OrderType.Asc)
                          sorts = sorts.Ascending(item.Name);
                      else
                          sorts = sorts.Descending(item.Name);
                  }
                  #endregion
      
                  #region 分頁處理
                  var skip = (pageIndex - 1) * pageSize;
      
                  var recordCount = _table.Find(filterDefinition).CountAsync(new CancellationToken()).Result;
                  var limit = pageSize;
                  return new PagedResult<TEntity>(
                      recordCount,
                      (int)(recordCount + pageSize - 1) / pageSize,
                      pageSize,
                      pageIndex,
                      _table.Find(filterDefinition)
                            .Sort(sorts)
                            .Skip(skip)
                            .Limit(limit)
                            .ToListAsync().Result);
                  #endregion
      
      
              }

      提出了一個條件過濾的私有方法,因為它的邏輯在兩個方法里都用了,所以進行提取

         /// <summary>
              /// 構建Mongo的查詢表達式,通過一個匿名對象
              /// </summary>
              /// <typeparam name="U"></typeparam>
              /// <param name="template"></param>
              /// <returns></returns>
              private BsonDocumentFilterDefinition<TEntity> GeneratorMongoQuery<U>(U template)
              {
                  var qType = typeof(U);
                  var outter = new BsonDocument();
                  var simpleQuery = new BsonDocument();
                  foreach (var item in qType.GetProperties())
                  {
                      if (item.PropertyType.IsClass && item.PropertyType != typeof(string))
                      {
                          //復雜類型,導航屬性,類對象和集合對象 
                          foreach (var sub in item.PropertyType.GetProperties())
                          {
                              simpleQuery.Add(new BsonElement(item.Name + "." + sub.Name,
                                 BsonValue.Create(sub.GetValue(item.GetValue(template)))
                                  ));
                          }
                      }
                      else
                      {
                          //簡單類型,ValueType和string
                          simpleQuery.Add(new BsonElement(item.Name,
                            BsonValue.Create(item.GetValue(template))
                              ));
                      }
                  }
                  return new BsonDocumentFilterDefinition<TEntity>(simpleQuery);
              }

      結果就是我們想好的,怎么樣,用法挺友好吧

       

      回到目錄

      posted @ 2015-05-28 18:06  張占嶺  閱讀(4210)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 强奷白丝美女在线观看| 性人久久久久| 精品视频在线观看免费观看| 国产成人亚洲精品狼色在线| A级毛片无码久久精品免费| 中文字幕成人精品久久不卡| 国产精品国产精品国产精品| 国产精品高清中文字幕| 国产无遮挡吃胸膜奶免费看| 国产人妻高清国产拍精品| 少妇激情av一区二区三区| 免费费很色大片欧一二区| 性xxxx视频播放免费| 欧美黑人巨大videos精品| 日韩一本不卡一区二区三区| 中文国产乱码在线人妻一区二区| 人妻少妇精品中文字幕| 亚洲国产成人无码av在线播放 | 通城县| 蜜芽久久人人超碰爱香蕉| 国产高清精品一区二区三区 | 久久一卡二卡三卡四卡| 亚洲色帝国综合婷婷久久| 精品 无码 国产观看| 墨脱县| 人人爽亚洲aⅴ人人爽av人人片| 另类图片亚洲人妻中文无码| 国产成人精品电影在线观看| 国产精品国产精品偷麻豆| 噜妇插内射精品| 亚洲 制服 丝袜 无码| 亚洲国产精品成人无码区| 国内自拍小视频在线看| 人人澡人人透人人爽| 国产人妻大战黑人20p| a级国产乱理伦片在线观看al| 奶头又大又白喷奶水av| 艳妇臀荡乳欲伦交换h在线观看| 伊伊人成亚洲综合人网7777| 亚洲精品一区二区三区综合| 成人亚欧欧美激情在线观看|