qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          Sunshine數(shù)據(jù)庫篇之查詢

          字體:        | 上一篇 下一篇 | 打印  | 我要投稿  | 推薦標簽: 軟件開發(fā) 數(shù)據(jù)庫

            需要的model,數(shù)據(jù)庫映射,sql生成器都用寫的代碼生成器生成,提高開發(fā)效率
            1:最簡單的查詢單條記錄
            AJ.Model.User ou = IDB.Simple<AJ.Model.User>(AJ.CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa"));
            同寫sql的方式
            AJ.Model.User ou = IDB.Simple<AJ.Model.User>("select * from User where USER_TYPE = @ut and PASSWORD = @pa", new { ut = 1, pa = "aaa" });
            2:查詢多條記錄
            List<AJ.Model.User> olist = IDB.List<AJ.Model.User>(AJ.CModel.User.Select.Where(a=>a.UUID > 2));
            同寫sql的方式
            List<AJ.Model.User> olist = IDB.List<AJ.Model.User>("select * from User where uuid > @uid", new { uid = 2 });
            查詢1000條30毫秒左右
            3:使用直接中間語言Emit查詢方式
            只用使用中間語言可以提高不少效率,可以減少解析的時間,但經(jīng)過測試效率提高不是非常明顯,現(xiàn)在.net的效率還是優(yōu)化得非常不錯了,為了維護方便
            主要還是使用寫代碼的方式
            List<AJ.Model.User> olist = IDB.ListEmit<AJ.Model.User>(AJ.CModel.User.Select.Where(a=>a.UUID > 2));
            4:條件的使用
            條件可以在Where后邊任意組合
            使用 and     (where a.USER_TYPE = @a3qf6eqse and  a.PASSWORD = @dve2tge)
            AJ.CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa")
            使用 or       (where a.USER_TYPE = @a3qf6eqse or  a.PASSWORD = @dve2tge)
            AJ.CModel.User.Select.Where(a => a.USER_TYPE == 1 | a.PASSWORD == "aaa")
            使用 Between and
            AJ.CModel.User.Select.Where(a => a.ID.Between(1,20))
            使用like
            AJ.CModel.User.Select.Where(a => a.ID.Like("%"+2)))
            使用 > ,>=,< <=.......
            AJ.CModel.oll_user.Select.Where(a => a.UUID>10 & a.UUID <= 20 | a.UUID >=20)
            5:選擇你需要查詢的字段
            使用Column函數(shù)進行字段選擇   as函數(shù)重命名
            只查詢NAME一個字段并重名
            IDB.Simple<AJ.Model.User>(AJ.CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa").Column(a=>a.PLAYER_NAME.As("name")))
            查詢多個字段
            IDB.Simple<AJ.Model.User>(AJ.CModel.User.Select.Where(a => a.USER_TYPE == 1 & a.PASSWORD == "aaa").Column(a=>new[]{a.PLAYER_NAME,a.STATUS,a.PASSWORD}))
            查詢字段重命名使用as和寫sql重明名得方式一樣
            IDB.Simple<AJ.Model.User>(AJ.CModel.User.Select.Where(a => a.USER_TYPE == 1).Column(a=>a.PLAYER_NAME.As("name")))

            6:多表連接查詢
            使用 join  ,left join ,right join 函數(shù)
            使用 join   gambleOrder連接notice表 條件為 gambleOrder.id =notice.id 寫法
            List<gambleOrder> olist = IDB.List<AJ.Model.gambleOrder>(AJ.CModel.oll_user.Select.Join<AJ.CModel.notice>((a, b) => a.id== b.id).Where(a => a.UUID > 10 & a.UUID <= 20 | a.UUID >= 20));
            使用left join   gambleOrder連接notice表 條件為 gambleOrder.id =notice.id 寫法
            List<gambleOrder> olist = IDB.List<AJ.Model.gambleOrder>(AJ.CModel.oll_user.Select.LeftJoin<AJ.CModel.notice>((a, b) => a.id== b.id).Where(a => a.UUID > 10 & a.UUID <= 20 | a.UUID >= 20));
            使用right  join   gambleOrder連接notice表條件為是gambleOrder.id =notice.id 寫法
            List<gambleOrder> olist = IDB.List<AJ.Model.gambleOrder>(AJ.CModel.oll_user.Select.RightJoin<AJ.CModel.notice>((a, b) => a.id== b.id).Where(a => a.UUID > 10 & a.UUID <= 20 | a.UUID >= 20));
            多表組合連接查詢   gambleOrder join notice 在left join Info表
            List<gambleOrder> olist = IDB.List<AJ.Model.gambleOrder>(AJ.CModel.oll_user.Select.Join<AJ.CModel.notice>((a, b) => a.id== b.id).LeftJoin<AJ.CModel.Info>((c, d) => c.id== d.id).Where(a => a.UUID > 10));
            7:常用函數(shù)的使用
            直接到字段選擇中就可以使用常用的函數(shù),可以隨意的進行組合的運算操作
            使用平均函數(shù)Avg  
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.Where(a => a.UUID > 10)
            .Column(a=>a.NICK_NAME.Avg));
            使用求和函數(shù)Sum
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.Where(a => a.UUID > 10)
            .Column(a=>a.NICK_NAME.Sum));
            組合運算操作  求平均數(shù)在計數(shù)在除以求和數(shù)
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.Where(a => a.UUID > 10)
            .Column(a=>(a.NICK_NAME.Avg*a.PASSWORD.Count)/a.STATUS.Sum));
            8:分組排序
            和數(shù)據(jù)庫的操作習慣一樣   使用GroupBy,OrderBy函數(shù)
            分組  更具STATUS分組
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.GroupBy(a=>a.STATUS));
            字段分組    更具STATUS和 TYPE分組
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.GroupBy(a=>a.STATUS & a.USER_TYPE));
            排序     更具id降序排序 desc
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.OrderBy(a=>a.ID.desc));
            多字段排序     更具id降序排序 desc ,TYPE升序asc
            List<AJ.Model.gambleOrder> go = DataBase.IDB.List<AJ.Model.gambleOrder>(
            AJ.CModel.gambleOrder.Select.OrderBy(a=>a.ID.desc & a.<span style="font-size:12px; color:#666666">TYPE</span>.asc));
            最能提高的就是自己研究和寫點框架與底層的東西,你要去查詢了解相關(guān)的知識,考慮很多東西,能學到很多平時學不到不常用的知識不斷的改進打破重構(gòu)

          posted on 2014-01-30 12:05 順其自然EVO 閱讀(238) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 三门县| 库尔勒市| 环江| 林周县| 河津市| 宁晋县| 枣阳市| 永泰县| 纳雍县| 民勤县| 青河县| 定襄县| 滦南县| 屏东县| 盈江县| 枝江市| 新野县| 芦溪县| 濮阳市| 方城县| 平山县| 昭通市| 渑池县| 花莲市| 绩溪县| 内江市| 宁波市| 靖州| 靖江市| 改则县| 泰州市| 蓬安县| 山丹县| 大庆市| 石棉县| 水富县| 清镇市| 台东市| 会宁县| 大宁县| 搜索|