Exemplo n.º 1
0
        public static void 测试_存储过程_视图()
        {
            //无参数
            var query1  = new DyQuery <sp_get_order_all>().Proc(new sp_get_order_all {
            });
            var result1 = localDy.Done(query1);

            Console.WriteLine(result1.AsJson());

            //有参数
            var query2 = new DyQuery <sp_add_order>().Proc(new sp_add_order
            {
                订单号  = Guid.NewGuid(),
                订单名称 = "O" + DateTime.Now.ToString("yyyyMMddHHmm"),
                账号   = "U0005",
                金额   = 1200.00m
            });
            var result2 = localDy.Done(query2);

            Console.WriteLine(result2.AsJson());

            //有参数
            var query3 = new DyQuery <sp_add_order>().Proc(new x_add_order
            {
                订单号  = Guid.NewGuid(),
                订单名称 = "X" + DateTime.Now.ToString("yyyyMMddHHmm"),
                账号   = "U0005",
                金额   = 200.00m
            });
            var result3 = localDy.Done(query3);

            Console.WriteLine(result3.AsJson());

            var query4       = new DyQuery <sp_multi_tb>().Proc(new sp_multi_tb {
            }).AsQuery();
            var result4      = localDy.Done(query4);
            var userList     = result4.AsTList <tb_user>(0);
            var categoryList = result4.AsTList <tb_categories>(1);
            var productList  = result4.AsTList <tb_product>(2);

            Console.WriteLine("tb_user count:{0},tb_categories count:{1},tb_product count:{2}", userList.Count, categoryList.Count, productList.Count);


            var query5 = new DyQuery <v_user_order>().AsQuery();

            Console.WriteLine(localDy.Done(query5).AsJson());
        }
Exemplo n.º 2
0
        public static void 测试_导数据()
        {
            //本地库数据初始化 插入10万条用户数据
            int insertCount = 100000;

            Console.WriteLine("开始测试_导数据,本地库插入{0}条用户数据", insertCount);
            Console.WriteLine("开始生成数据");
            List <tb_user> userlist = new List <tb_user>();

            for (int i = 200; i < insertCount + 200; i++)
            {
                userlist.Add(
                    new tb_user
                {
                    自增NO = i, //自增列 框架不会去插入
                    账号   = string.Format("U{0:D4}", i),
                    密码   = "12345678",
                    用户名  = string.Format("Tester{0:D3}", i),
                    性别   = i % 2 == 0,
                    年龄   = RNG.Next(20, 60),
                    会员等级 = (byte)(RNG.Next(1, 255)),
                    积分   = RNG.Next(1000, 10000),
                    消费能力 = Math.Abs((short)RNG.Next(1, 100)),
                    头像   = 获取头像(i),
                    注册日期 = DateTime.Now
                });
            }
            Console.WriteLine("完成生成数据,开始执行插入本地库");
            long ms = localDy.BulkInsert(userlist);

            Console.WriteLine("插入本地库{1}条数据执行:{0}毫秒", ms, insertCount);
            Console.WriteLine();


            //单表->导入远程服务器
            Console.WriteLine("开始执行导入远程服务器");
            var remoteDy = new Dy("remoteServer");
            var query1   = new DyQuery <tb_user>().AsQuery();
            var result   = localDy.CopyToRemote <kQL.orm.demo.remotemodels.tb_user>(query1, remoteDy);

            Console.WriteLine("完成导入远程服务器,本次执行毫秒:{0}", result.Item1);
            Console.WriteLine();

            //聚合结果导入远程服务器
            var query2 = new DyQuery <tb_order>(t2 => t2)
                         .Join <tb_order_detail>(JoinWay.InnerJoin, t3 => t3).On <tb_order, tb_order_detail>((t2, t3) => t2.订单ID == t3.订单ID)
                         .Group(t2 => t2.订单ID).Group(t2 => t2.账号)
                         .Having <tb_order_detail>(WhereWay.And, t3 => t3.订单ID.Dy_Count() > 5)
                         .Select <tb_order, tb_order_detail>(
                (t2, t3) => new
            {
                t2.订单ID,
                t2.账号,
                明细数量   = t3.订单ID.Dy_Count(),
                总金额Max = t3.支付价.Dy_Max(),
                总金额Min = t3.支付价.Dy_Min(),
                总金额Sum = t3.支付价.Dy_Sum(),
                总金额Avg = t3.支付价.Dy_Avg(),
                R金额    = ((t3.支付价.Dy_Max() + t3.支付价.Dy_Min() - t3.支付价.Dy_Sum() * t3.支付价.Dy_Avg()) / t3.支付价.Dy_Min()).Dy_Convert <decimal, decimal>("decimal(18,2)")
            }
                ).AsQuery();

            result = localDy.CopyToRemote <kQL.orm.demo.remotemodels.tb_order_info>(query2, remoteDy);
            Console.WriteLine("聚合结果导入远程服务器->本次执行毫秒:{0}", result.Item1);
        }
Exemplo n.º 3
0
        public static void 测试_结果集()
        {
            /*以下方法都是对已经查询后的结果集,做进一步处理*/
            //RowCount 返回影响的行数,只对 增、删、改 有效,查询返回结果永远是0
            List <int> idlist = new List <int>();

            for (int i = 0; i < 100; i++)
            {
                idlist.Add(i + 50);
            }
            var multi_user_batch = idlist.Select(i =>
            {
                Thread.Sleep(50);
                return(new tb_user
                {
                    账号 = string.Format("U{0:D4}", i),
                    密码 = "12345678",
                    用户名 = string.Format("Tester{0:D3}", i),
                    性别 = i % 2 == 0,
                    年龄 = new Random().Next(20, 60),
                    会员等级 = (byte)(new Random().Next(1, 255)),
                    积分 = new Random().Next(1000, 10000),
                    消费能力 = Math.Abs((short)new Random().Next(1, 100)),
                    头像 = 获取头像(i),
                    注册日期 = DateTime.Now,
                });
            }).ToList();
            //var q0 = new DyQuery<tb_user>().Insert(multi_user_batch).AsQuery();
            //var result0 = dy.Query(q0);
            //Console.WriteLine("影响的行数:" + result0.RowCount);


            //Records返回结果集
            var q1     = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var result = localDy.Done(q1);

            Console.WriteLine("影响的行数:" + result.RowCount);//返回0
            Console.WriteLine("结果集中表的数量:" + result.Records.Tables.Count);


            //AsT -> 如果查询有多条记录,返回记录的第一条
            var query1 = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var user1  = localDy.Done(query1).AsDyT();

            Console.WriteLine("账号:{0},用户名:{1}", user1.账号, user1.用户名);

            //AsTList ->返回记录列表
            var query2    = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var user2list = localDy.Done(query2).AsDyTList();

            foreach (var user2 in user2list)
            {
                Console.WriteLine("账号:{0},用户名:{1}", user2.账号, user2.用户名);
            }


            //AsRC ->返回首行首列
            var query3 = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var 首行首列   = localDy.Done(query3).AsRC();

            Console.WriteLine(首行首列);

            //AsJson ->将Records结果集,直接转成标准json字符串格式  ajax请求的时候返回json格式很方便
            var query4 = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();

            Console.WriteLine(localDy.Done(query4).AsJson());

            //AsTPageList
            int pIndex   = 1;
            int pSize    = 5;
            var criteria = new DyQuery <tb_user>()
                           .Order(OrderWay.Asc, t1 => t1.账号)
                           .Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 });

            var query5 = criteria.AsQueryPaged(pIndex, pSize);
            var plist1 = localDy.Done(query5).AsTPageList <tb_user>();

            Console.WriteLine("当前页:{0},每页大小:{1},总记录数:{2},总页数:{3},是否有下一页:{4},是否有上一页:{5}", plist1.PageIndex, plist1.PageSize, plist1.TotalCount, plist1.TotalPages, plist1.HasNextPage, plist1.HasPreviousPage);
            pIndex = 3;
            var query6 = criteria.AsQueryPaged(pIndex, pSize);
            var plist2 = localDy.Done(query6).AsTPageList <tb_user>();

            Console.WriteLine("当前页:{0},每页大小:{1},总记录数:{2},总页数:{3},是否有下一页:{4},是否有上一页:{5}", plist2.PageIndex, plist2.PageSize, plist2.TotalCount, plist2.TotalPages, plist2.HasNextPage, plist2.HasPreviousPage);


            //AsKeyValues 转置输出,画图、统计时比较有用

            /*
             * colName1 | colName2 | colName3
             * ------------------------------
             * 1        | 2        | 3
             * 4        | 5        | 6
             * 7        | 8        | 9
             * ==>
             * colName1:[1,4,7]
             * colName2:[2,5,8]
             * colName3:[3,6,9]
             */
            var query7    = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("0")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var keyValues = localDy.Done(query7).AsKeyValues();

            foreach (var key in keyValues.Keys)
            {
                Console.WriteLine("Key:{0},Values:{1}", key, string.Join(",", keyValues[key].ToArray()));
            }

            //AsDyT 动态对象 与 AsT类似 返回第一行数据
            var query8     = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var dynamicObj = localDy.Done(query8).AsDyT();

            Console.WriteLine("账号:{0},用户名:{1},消费能力:{2}", dynamicObj.账号, dynamicObj.用户名, dynamicObj.消费能力);

            //AsDyTList  与 AsTList类似 返回列表
            var query9         = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_Contains("00")).Select(t1 => new { t1.账号, t1.用户名, t1.消费能力 }).AsQuery();
            var dynamicObjList = localDy.Done(query9).AsDyTList();

            foreach (var dyObj in dynamicObjList)
            {
                Console.WriteLine("账号:{0},用户名:{1},消费能力:{2}", dyObj.账号, dyObj.用户名, dyObj.消费能力);
            }

            //AsTree 树结构  分类处理、如省市区、商品的分类
            var query10      = new DyQuery <tb_categories>().AsQuery();
            var treeNodeRoot = localDy.Done(query10).AsTree <tb_categories>((t1, t2) => t1.父ID == t2.子ID);

            Console.WriteLine(treeNodeRoot.ToString());
            //树搜索 引入 kQL.orm.results 命名空间
            //ConvertTTreeToTList 树节点转成List列表
            //var treeToList = tree.ConvertTTreeToTList();//不输出跟节点
            var treeToList = treeNodeRoot.ConvertTTreeToTList(true); //输出跟节点

            Console.WriteLine("treeToList数量:{0}", treeToList.Count);
            //FindTTreeNode
            tb_categories category = new tb_categories {
                分类名称 = "台式机"
            };
            var findTreeNode = treeNodeRoot.FindTTreeNode(category, (treeNode, searchCategoryInstance) => treeNode.Current.分类名称 == searchCategoryInstance.分类名称);//其中searchCategoryInstance 就是 category

            Console.WriteLine(findTreeNode.ToString());
            //DFS_FlagTree 深度优先将路径上的[TreeNode->Flag]标记为1,应用场景 树型复选框,选中某节点,节点上级和下级节点都要选中
            treeNodeRoot.DFS_FlagTree(category, (treeNode, searchCategoryInstance) => treeNode.Current.分类名称 == searchCategoryInstance.分类名称);
            Console.WriteLine("---------DFS_FlagTree 节点标记------");
            Console.WriteLine(treeNodeRoot.ToString());
            //BFS_CutFlagTree 广度优先路径上的[TreeNode->Flag]进行剪枝,应用场景 树型复选框,选中某节点,节点上级和下级节点都要选中,将所有选中的节点返回
            treeNodeRoot.BFS_CutFlagTree();
            Console.WriteLine("---------BFS_CutFlagTree 节点剪枝------");
            Console.WriteLine(treeNodeRoot.ToString());
            /****** DFS_FlagTree 与 BFS_CutFlagTree 一般情况都是要配合使用,先对节点标记,再对节点剪枝 ******/



            //一对一、一对多 AsT_OneOne、AsTList_OneOne、AsT_OneMany、AsTList_OneMany
            var query11 = new DyQuery <tb_order>(t2 => t2)
                          .Join <tb_order_detail>(JoinWay.InnerJoin, (t2, t3) => t2.订单ID == t3.订单ID)
                          .Order <DateTime>(OrderWay.Asc, t2 => t2.订单时间)
                          .Select <tb_order>(t2 => new { t2.订单ID, t2.账号, t2.订单名称 })
                          .Select <tb_order_detail>(t3 => new { t3.订单ID, t3.订单明细ID, t3.产品名称, t3.支付价 })
                          .AsQuery();
            //AsT_OneOne 单条
            var r0 = localDy.Done(query11).AsT_OneOne <tb_order, tb_order_detail>();

            Console.WriteLine("AsT_OneOne");
            Console.WriteLine("{0},{1}", r0.Item1.订单ID, r0.Item1.账号);
            Console.WriteLine("{0},{1},{2}", r0.Item2.订单ID, r0.Item2.产品名称, r0.Item2.支付价);

            //AsTList_OneOne 多条
            var r1 = localDy.Done(query11).AsTList_OneOne <tb_order, tb_order_detail>();

            Console.WriteLine("AsTList_OneOne");
            foreach (var r in r1)
            {
                Console.WriteLine("{0},{1}", r.Item1.订单ID, r.Item1.账号);
                Console.WriteLine("{0},{1},{2},{3}", r.Item2.订单ID, r.Item2.订单明细ID, r.Item2.产品名称, r.Item2.支付价);
            }

            //AsT_OneMany 返回单条,一般情况下无什么意义
            var r2 = localDy.Done(query11).AsT_OneMany <tb_order, tb_order_detail>();

            Console.WriteLine("{0},{1}", r2.Item1.订单ID, r2.Item1.账号);
            foreach (var r2_0 in r2.Item2)
            {
                Console.WriteLine("--{0},{1},{2}", r0.Item2.订单ID, r0.Item2.产品名称, r0.Item2.支付价);
            }

            //AsTList_OneMany 返回多条
            // 指定分组 one => new tb_order { 账号 = one.账号 },即对结果集Table的,主表字段进行过滤
            var r3 = localDy.Done(query11).AsTList_OneMany <tb_order, tb_order_detail>(one => new tb_order {
                账号 = one.账号
            });
            /** new 主表类型,这里 new tb_order , 只要属性字段,“one.账号”无实际意义  ,也可以写成以下形式,与上一条等价 **/
            /****即,只认对象类型中的属性名称 ****/
            var r4 = localDy.Done(query11).AsTList_OneMany <tb_order, tb_order_detail>(one => new tb_order {
                账号 = ""
            });

            foreach (var oneMany in r4)
            {
                Console.WriteLine("账号:{0},订单数量:{1}", oneMany.Item1.账号, oneMany.Item2.Count);
            }

            //AsTList_OneMany 根据多个字段分组
            var r5 = localDy.Done(query11).AsTList_OneMany <tb_order, tb_order_detail>(one => new tb_order {
                账号 = one.账号, 订单ID = one.订单ID
            });
            //以下等价
            var r6 = localDy.Done(query11).AsTList_OneMany <tb_order, tb_order_detail>(one => new tb_order {
                账号 = "", 订单ID = Guid.Empty
            });

            foreach (var oneMany in r6)
            {
                Console.WriteLine("订单名称:{0},账号:{1},订单数量:{2}", oneMany.Item1.订单名称, oneMany.Item1.账号, oneMany.Item2.Count);
            }
        }
Exemplo n.º 4
0
        public static void 测试_扩展方法()
        {
            //字符串函数
            var query1 =
                new DyQuery <tb_user>()
                .Where(t1 => t1.会员等级 > 100)
                .Select(t1 => new
            {
                Dy_Ascii      = t1.账号.Dy_Ascii(),
                Dy_Char       = t1.消费能力.Dy_Char(),
                Dy_NChar      = t1.消费能力.Dy_NChar(),
                Dy_Unicode    = t1.用户名.Dy_Unicode(),
                Dy_Quotename1 = t1.用户名.Dy_Quotename(),
                Dy_Quotename2 = t1.用户名.Dy_Quotename("{}"),
                Dy_Soundex    = t1.用户名.Dy_Soundex(),
                Dy_Replicate  = t1.用户名.Dy_Replicate(3),
                Dy_CharIndex1 = t1.用户名.Dy_CharIndex("001"),
                Dy_CharIndex2 = t1.用户名.Dy_CharIndex("0", 3),
                Dy_PatIndex   = t1.用户名.Dy_PatIndex("0%1"),
                Dy_Difference = t1.用户名.Dy_Difference("tester0x"),
                Dy_Left       = t1.用户名.Dy_Left(2),
                Dy_Right      = t1.用户名.Dy_Right(2),
                Dy_Len        = t1.用户名.Dy_Len(),
                Dy_Low        = t1.用户名.Dy_Lower(),
                Dy_Upper      = t1.用户名.Dy_Upper(),
                Dy_LTrim      = t1.用户名.Dy_LTrim(),
                Dy_RTrim      = t1.用户名.Dy_RTrim(),
                Dy_Reverse    = t1.用户名.Dy_Reverse(),
                Dy_Space      = t1.用户名 + DyExtFn.Dy_Space(3) + t1.用户名,
                Dy_Str1       = 12.2321d.Dy_Str(),
                Dy_Str2       = 12.2321d.Dy_Str(6, 2),
                Dy_Stuff      = t1.用户名.Dy_Stuff("x", 1, 0),
                Dy_Substring  = t1.用户名.Dy_Substring(2, 1),
                Dy_Replace    = t1.用户名.Dy_Replace("0", "o")
            }).AsQueryTopN(1);
            var result1 = localDy.Done(query1);

            Console.WriteLine(result1.AsJson());


            //日期和时间函数
            var query2 = new DyQuery <tb_user>()
                         .Select(t1 => new {
                Dy_DateAdd_YY  = t1.注册日期.Dy_DateAdd(2, "yy"),
                Dy_DateAdd_DD  = t1.注册日期.Dy_DateAdd(30, "dd"),
                Dy_DateDiff_DD = t1.注册日期.Dy_DateDiff(DateTime.Now, "dd"),
                Dy_DateDiff_YY = t1.注册日期.Dy_DateDiff(DateTime.Now, "yy"),
                Dy_DateName_QQ = t1.注册日期.Dy_DateName("qq"),
                Dy_DateName_WW = t1.注册日期.Dy_DateName("ww"),
                Dy_DatePart_YY = t1.注册日期.Dy_DatePart("yy"),
                Dy_Day         = t1.注册日期.Dy_Day(),
                Dy_Month       = t1.注册日期.Dy_Month(),
                Dy_Year        = t1.注册日期.Dy_Year(),
                Dy_GetDate     = DyExtFn.Dy_GetDate(),
                Dy_GetUtcDate  = DyExtFn.Dy_GetUtcDate(),
            })
                         .AsQueryTopN(1);
            var result2 = localDy.Done(query2);

            Console.WriteLine(result2.AsJson());


            //数学函数
            var query3 = new DyQuery <tb_order_detail>()
                         .Select(t1 => new {
                M            = -1,
                PI           = DyExtFn.Dy_M_PI(),
                Dy_M_Abs     = (-1).Dy_M_Abs(),
                Dy_M_Cos     = 1.0.Dy_M_Cos(),
                Dy_M_Sin     = 1.5.Dy_M_Sin(),
                Dy_M_Cot     = 1.5.Dy_M_Cot(),
                Dy_M_Tan     = 1.5.Dy_M_Tan(),
                Dy_M_ACos    = 0.5.Dy_M_ACos(),    //[0,pi]
                Dy_M_ASin    = (-0.5).Dy_M_ASin(), //[-pi/2,+pi/2]
                Dy_M_ATan    = 0.5.Dy_M_ATan(),    //[-pi/2,+pi/2]
                Dy_M_Degrees = 1.5.Dy_M_Degrees(),
                Dy_M_Radians = 1.5.Dy_M_Radians(),
                Dy_M_Exp     = 1.5.Dy_M_Exp(),
                Dy_M_Log1    = 1.5.Dy_M_Log(),
                Dy_M_Log2    = 1.5.Dy_M_Log(1.2),
                Dy_M_Log10   = 1.5.Dy_M_Log10(),
                Dy_M_Ceiling = 1.5.Dy_M_Ceiling(),
                Dy_M_Floor   = 1.5.Dy_M_Floor(),
                Dy_M_Power   = 1.5.Dy_M_Power(2.0),
                Dy_M_Sqrt    = 4.0.Dy_M_Sqrt(),
                Dy_M_Sign    = (1.3).Dy_M_Sign(),
                Dy_M_Rand1   = DyExtFn.Dy_M_Rand(),
                Dy_M_Rand2   = (-1).Dy_M_Rand(),
                Dy_M_Round1  = (-1.333).Dy_M_Round(2),
                Dy_M_Round2  = (-1.336).Dy_M_Round(2, 2)
            })
                         .AsQueryTopN(1);
            var result3 = localDy.Done(query3);

            Console.WriteLine(result3.AsJson());

            //类型转换函数
            var query4 = new DyQuery <tb_user>()
                         .Select(t1 => new {
                注册日期  = t1.注册日期.Dy_IsNull <DateTime, string>("20170101").Dy_Convert <string, string>(120, "varchar(10)"),
                消费能力  = t1.消费能力.Dy_Cast <short, string>("varchar(10)") + "AAA",
                消费能力2 = t1.消费能力.Dy_Cast <short, double>("decimal(18,4)")
            })
                         .AsQueryTopN(1);
            var result4 = localDy.Done(query4);

            Console.WriteLine(result4.AsJson());

            //系统函数
            var query5 = new DyQuery <tb_user>()
                         .Select(t1 => new {
                Dy_IsNull    = t1.注册日期.Dy_IsNull <DateTime, string>("20170101"),
                Dy_IsNumeric = t1.消费能力.Dy_IsNumeric(),
                Dy_IsDate    = t1.消费能力.Dy_IsDate(),
                Dy_IsDate2   = t1.注册日期.Dy_IsDate()
            })
                         .AsQueryTopN(1);
            var result5 = localDy.Done(query5);

            Console.WriteLine(result5.AsJson());



            //聚合函数
            var query6 = new DyQuery <tb_order>(t2 => t2)
                         .Join <tb_order_detail>(JoinWay.InnerJoin, t3 => t3).On <tb_order, tb_order_detail>((t2, t3) => t2.订单ID == t3.订单ID)
                         //与下面等价
                         //.Join<tb_order_detail>(JoinWay.InnerJoin, (t2, t3) => t2.订单ID == t3.订单ID)
                         .Group(t2 => t2.订单ID).Group(t2 => t2.账号)
                         .Having <tb_order_detail>(WhereWay.And, t3 => t3.订单ID.Dy_Count() > 5)
                         .Select <tb_order, tb_order_detail>(
                (t2, t3) => new
            {
                t2.订单ID,
                t2.账号,
                明细数量   = t3.订单ID.Dy_Count(),
                总金额Max = t3.支付价.Dy_Max(),
                总金额Min = t3.支付价.Dy_Min(),
                总金额Sum = t3.支付价.Dy_Sum(),
                总金额Avg = t3.支付价.Dy_Avg(),
                R金额    = ((t3.支付价.Dy_Max() + t3.支付价.Dy_Min() - t3.支付价.Dy_Sum() * t3.支付价.Dy_Avg()) / t3.支付价.Dy_Min()).Dy_Convert <decimal, decimal>("decimal(18,2)")
            }
                )
                         .AsQuery();

            Console.WriteLine(localDy.Done(query6).AsJson());


            //自定义扩展函数
            //"Dy_TimeFrt","Dy_Count1"
            var query7 = new DyQuery <tb_user>()
                         .Where(t1 =>
                                t1.用户名.Dy_StartsWith("T") || // like 'T%'
                                t1.密码.Dy_EndsWith("8") || // like '%8'
                                t1.账号.Dy_Contains("003") || // like '%003%'
                                t1.用户名.Dy_StartsWithNot("T") || // not like 'T%'
                                t1.密码.Dy_EndsWithNot("8") || // not like '%8'
                                t1.账号.Dy_ContainsNot("003")// not like '%003%'
                                )
                         .Select(t1 => t1)
                         .AsQuery();
            var result7 = localDy.Done(query7);

            Console.WriteLine(result7.AsJson());

            query7 = new DyQuery <tb_user>()
                     .Where(t1 =>
                            t1.用户名.Dy_StrGT("678") || // [字符串_字段] > '678'
                            t1.用户名.Dy_StrGE("678") ||// [字符串_字段] >= '678'
                            t1.用户名.Dy_StrLT("678") ||// [字符串_字段] < '678'
                            t1.用户名.Dy_StrLE("678") ||// [字符串_字段] <= '678'
                            t1.用户名.Dy_StrGT("678")
                            )
                     .Select(t1 => t1)
                     .AsQuery();
            result7 = localDy.Done(query7);
            Console.WriteLine(result7.AsJson());

            query7 = new DyQuery <tb_user>()
                     .Where(t1 =>
                            t1.账号.Dy_Right(1).Dy_In(new List <string> {
                "1", "2"
            })
                            ||
                            t1.账号.Dy_Right(1).Dy_InNot(new List <string> {
                "7", "8"
            })
                            ||
                            t1.账号.Dy_In(
                                new DyQuery <tb_order>(t2 => t2).Select(t2 => new { t2.账号 }).AsQuery()
                                )
                            ||
                            t1.注册日期 <= DateTime.Now.Dy_TimeFrt("yyyy-MM") // Dy_TimeFrt:将时间格式化后转化为时间类型 便于与数据库字段的比较
                            )
                     .Select(t1 => new { t1.账号 })
                     .AsQuery();
            result7 = localDy.Done(query7);
            Console.WriteLine(result7.AsJson());

            query7 = new DyQuery <tb_user>()
                     .Where(t1 =>
                            t1.账号.Dy_Right(1).Dy_In(new List <string> {
                "1", "2"
            })
                            )
                     .Select(t1 => new { 总计 = DyExtFn.Dy_CountN(1) }) //直接统计
                     .AsQuery();
            result7 = localDy.Done(query7);
            Console.WriteLine(result7.AsJson());

            query7 = new DyQuery <tb_user>()
                     .Where(t1 =>
                            t1.账号.Dy_Right(1).Dy_In(new List <string> {
                "1", "2"
            })
                            )
                     .Select(t1 => new { 总计 = t1.账号.Dy_Count() }) //作用在字段上
                     .AsQuery();
            result7 = localDy.Done(query7);
            Console.WriteLine(result7.AsJson());
        }
Exemplo n.º 5
0
        public static void 测试_查询()
        {
            //单表
            //获取全部数据
            var query1  = new DyQuery <tb_user>().AsQuery();
            var result1 = localDy.Done(query1);

            Console.WriteLine(result1.AsJson());
            var userList        = result1.AsTList <tb_user>(); //返回列表
            var userDynamicList = result1.AsDyTList();         //返回动态对象列表

            //条件过滤
            var query2 =
                new DyQuery <tb_user>()
                .Where(t1 => t1.会员等级 > 100)
                //.Where(t1 => t1.会员等级 > 50 && t1.性别 == true && t1.注册日期 == null && t1.上次登录日期 !=null)
                .Select(t1 => new
            {
                t1.账号,
                t1.用户名,
                次登录日期     = t1.次登录日期.Dy_IsNull("20170601"),
                日期Cast    = t1.次登录日期.Dy_IsNull("20170601").Dy_Cast <string, string>("varchar"),
                日期Convert = t1.次登录日期.Dy_IsNull("20170601").Dy_Convert <string, string>(111, "varchar")
            }).AsQuery();
            var result2 = localDy.Done(query2);

            Console.WriteLine(result2.AsJson());

            //多表复杂查询
            //指定用户的订单及明细 调用自定义函数 GetUserId()
            //string userId = GetUserId();
            var query3 =
                //new DyQuery<tb_order_detail>()
                //or
                new DyQuery <tb_order_detail>(t1 => t1) //指定表别名
                .Join <tb_order>(JoinWay.InnerJoin, (t1, t2) => t1.订单ID == t2.订单ID)
                .Join <tb_product>(JoinWay.InnerJoin, (t1, t3) => t1.产品ID == t3.产品ID)
                .Join <tb_order, tb_user>(JoinWay.InnerJoin, (t2, t4) => t2.账号 == t4.账号)
                .Where <tb_user>(t4 => t4.账号 == GetUserId()) //=> GetUserId()
                .Where <tb_order>(t2 =>
                                  t2.订单时间.Dy_DateDiff(DateTime.Now, "dd") >= 0
                                  &&
                                  t2.订单时间.Dy_DateAdd(-5, "mm").Dy_DateDiff(DateTime.Now, "dd") > 0
                                  )
                .Select <tb_order_detail, tb_order, tb_product, tb_user>
                (
                    (t1, t2, t3, t4) =>
                    new
            {
                t4.账号,
                产品简称 = t3.产品名称.Dy_Substring(1, 2),
                t2.订单名称,
                支付价 = t1.支付价.Dy_M_Floor(),
            }
                )
                .AsQuery();
            var result3 = localDy.Done(query3);

            Console.WriteLine(result3.AsJson());



            //IN 查询
            var query4 = new DyQuery <tb_user>()
                         .Where(t1 => t1.用户名.Dy_Substring(1, 6).Dy_Right(1).Dy_In(new List <string> {
                "1", "2", "3"
            }))
                         .Where(t1 => t1.账号.Dy_In(new DyQuery <tb_order>(t2 => t2).Select(t2 => t2.账号)))
                         .Select(t1 => t1.账号).AsQuery();

            Console.WriteLine(localDy.Done(query4).AsJson());


            //Exists 子查询
            var query5 = new DyQuery <tb_user>()
                         .Exists(WhereWay.And
                                 , new DyQuery <tb_order>(t2 => t2)
                                 .Join <tb_order_detail>(JoinWay.InnerJoin, t3 => t3).On <tb_order, tb_order_detail>((t2, t3) => t2.订单ID == t3.订单ID)
                                 //与下面等价
                                 //.Join<tb_order_detail>(JoinWay.InnerJoin, (t2, t3) => t2.订单ID == t3.订单ID)
                                 .Group(t2 => t2.订单ID).Group(t2 => t2.账号)
                                 .Having <tb_order_detail>(WhereWay.And, t3 => t3.订单ID.Dy_Count() > 5)
                                 //.Select<tb_order, tb_order_detail>((t2, t3) => new { t2.订单ID, t2.账号, 明细数量 = t3.订单ID.Dy_Count() })
                                 .Where <tb_order, tb_user>((t2, t1) => t2.账号 == t1.账号)
                                 .Select(t2 => 1).AsQuery()
                                 )
                         .Select(t1 => new { t1.账号, t1.用户名 })
                         .AsQuery();

            Console.WriteLine(localDy.Done(query5).AsJson());


            //Top N 查询
            var query6 = new DyQuery <tb_order>(t2 => t2)
                         .Join <tb_order_detail>(JoinWay.InnerJoin, (t2, t3) => t2.订单ID == t3.订单ID)
                         .Select <tb_order, tb_order_detail>((t2, t3) => new { t2.订单ID, t2.账号, t3.订单明细ID })
                         .AsQueryTopN(5);

            Console.WriteLine(localDy.Done(query6).AsJson());

            //分页  json字符串中会返回额外的几个字段  _totalRowCount(总记录数), _pageIndex(分页索引), _pageSize(页大小), RN (序号)
            var query7 = new DyQuery <tb_order>(t2 => t2)
                         .Join <tb_order_detail>(JoinWay.InnerJoin, (t2, t3) => t2.订单ID == t3.订单ID)
                         .Order <DateTime>(OrderWay.Asc, t2 => t2.订单时间)
                         .Select <tb_order, tb_order_detail>((t2, t3) => new { t2.订单ID, t2.账号, t3.订单明细ID })
                         .Select <tb_order_detail>(t3 => t3.订单ID)
                         .AsQuery();

            //.AsQueryPaged(1,10);
            Console.WriteLine(localDy.Done(query7).AsJson());


            //组合WHERE
            var query8 = new DyQuery <tb_user>()
                         .Where(t1 => (t1.用户名.Dy_EndsWith("1") || t1.账号.Dy_Right(1) == "2") && (t1.用户名.Dy_Contains("3") || t1.账号.Dy_Contains("3")))
                         .Select(t1 => t1.账号).AsQuery();

            Console.WriteLine(localDy.Done(query8).AsJson());
        }
Exemplo n.º 6
0
        public static void 测试_更新()
        {
            //更新指定用户
            var query0   = new DyQuery <tb_user>().AsQuery();
            var userList = localDy.Done(query0).AsTList <tb_user>();
            var user1    = userList.FirstOrDefault(user => user.账号 == "U0012");

            user1.会员等级 = 100;
            user1.年龄   = 0;
            var query1 = new DyQuery <tb_user>().Update(user1).AsQuery();
            var json1  = localDy.Done(query1).AsJson();

            Console.WriteLine(json1);

            //多实例更新用户 tb_user.v 带版本
            userList.ForEach(user => user.会员等级 = 80);
            var query2  = new DyQuery <tb_user>().Update(userList).AsQuery();
            var result2 = localDy.Done(query2);

            if (result2.RowCount == userList.Count)
            {
                Console.WriteLine("更新成功");
            }
            else
            {
                Console.WriteLine("更新失败,因为 前一个更新将版本号已经更新了 本次更新不完整 事务回滚");
            }
            var json2 = result2.AsJson();

            Console.WriteLine(json2);

            //更新订单
            var query3    = new DyQuery <tb_order>();
            var orderList = localDy.Done(query3).AsTList <tb_order>();
            var order     = orderList.FirstOrDefault();
            var orderId   = order.订单ID;
            var query4    = new DyQuery <tb_order_detail>().Where(t1 => t1.订单ID == orderId);
            var details   = localDy.Done(query4).AsTList <tb_order_detail>();

            details.ForEach(detail => detail.支付价 = detail.支付价 * 1.1m);
            order.总金额 = details.Sum(detail => detail.支付价);

            var query5  = new DyQuery <tb_order>().Update(order).Update(details).AsQuery();
            var result5 = localDy.Done(query5);

            if (result5.RowCount == 1 /*order数量*/ + details.Count)
            {
                Console.WriteLine("更新成功");
            }
            else
            {
                Console.WriteLine("更新失败");
            }
            Console.WriteLine(result5.AsJson());


            //update from 更新  [产品名称]变更需要将订单明细中[产品名称]同时变更
            var query6 = new DyQuery <tb_order_detail>().Update().Set <tb_product>((t1, t2) => t1.产品名称 == t2.产品名称.Dy_Substring(1, 4))
                         .Join <tb_product>(JoinWay.InnerJoin, (t1, t2) => t1.产品ID == t2.产品ID)
                         .Where(t1 => t1.支付价 > 30).AsQuery();
            var result6 = localDy.Done(query6);

            Console.WriteLine(result6.AsJson());
        }
Exemplo n.º 7
0
        public static void 测试_插入()
        {
            //单条插入、添加一个用户
            var user1 = new tb_user
            {
                自增NO = 1, //自增列 框架不会去插入
                账号   = string.Format("U{0:D4}", 1),
                密码   = "12345678",
                用户名  = string.Format("Tester{0:D3}", 1),
                性别   = true,
                年龄   = new Random().Next(20, 60),
                会员等级 = (byte)(new Random().Next(1, 255)),
                积分   = new Random().Next(1000, 10000),
                消费能力 = Math.Abs((short)new Random().Next(1, 100)),
                头像   = 获取头像(1),
                注册日期 = DateTime.Now
            };
            //var query1 = new DyQuery<tb_user>().Insert(user1).AsQuery();
            //var result = new Dy().Query(query1);
            ////result.RowCount;//影响的行数
            //Console.WriteLine(result.AsJson());
            //Thread.Sleep(50);

            //多条 插入
            var multi_user = new List <int> {
                2, 3, 4, 5, 6, 7, 8, 9, 10
            }.Select(i =>
            {
                Thread.Sleep(50);
                return(new tb_user
                {
                    自增NO = i, //自增列 框架不会去插入
                    账号 = string.Format("U{0:D4}", i),
                    密码 = "12345678",
                    用户名 = string.Format("Tester{0:D3}", i),
                    性别 = i % 2 == 0,
                    年龄 = new Random().Next(20, 60),
                    会员等级 = (byte)(new Random().Next(1, 255)),
                    积分 = new Random().Next(1000, 10000),
                    消费能力 = Math.Abs((short)new Random().Next(1, 100)),
                    头像 = 获取头像(i),
                    注册日期 = DateTime.Now
                });
            }).ToList();
            //var dyQuery = new DyQuery<tb_user>()
            //    .Insert(multi).AsQuery();
            //string json = dy.Query(dyQuery).AsJson();
            //Console.WriteLine(json);
            //Thread.Sleep(50);


            //批量插入
            var multi_user_batch = new List <int> {
                11, 12, 13, 14, 15, 16, 17, 18, 19, 20
            }.Select(i =>
            {
                Thread.Sleep(50);
                return(new tb_user
                {
                    自增NO = i, //自增列 框架不会去插入
                    账号 = string.Format("U{0:D4}", i),
                    密码 = "12345678",
                    用户名 = string.Format("Tester{0:D3}", i),
                    性别 = i % 2 == 0,
                    年龄 = new Random().Next(20, 60),
                    会员等级 = (byte)(new Random().Next(1, 255)),
                    积分 = new Random().Next(1000, 10000),
                    消费能力 = Math.Abs((short)new Random().Next(1, 100)),
                    头像 = 获取头像(i),
                    注册日期 = DateTime.Now,
                });
            }).ToList();

            localDy.BulkInsert(multi_user_batch);


            //初始化 分类
            var multi_category = new List <tb_categories> {
                new tb_categories {
                    子ID  = "100",
                    父ID  = "",
                    分类名称 = "数码",
                    顺序   = 1
                }
                , new tb_categories {
                    子ID  = "100100",
                    父ID  = "100",
                    分类名称 = "电脑",
                    顺序   = 1
                }
                , new tb_categories {
                    子ID  = "100101",
                    父ID  = "100",
                    分类名称 = "手机",
                    顺序   = 1
                }
                , new tb_categories {
                    子ID  = "100100100",
                    父ID  = "100100",
                    分类名称 = "笔记本",
                    顺序   = 1
                }
                , new tb_categories {
                    子ID  = "100100101",
                    父ID  = "100100",
                    分类名称 = "台式机",
                    顺序   = 1
                }
                , new tb_categories {
                    子ID  = "100101100",
                    父ID  = "100101",
                    分类名称 = "苹果",
                    顺序   = 1
                }
                , new tb_categories {
                    子ID  = "100101101",
                    父ID  = "100101",
                    分类名称 = "小米",
                    顺序   = 1
                }
            };

            var multi_products = new List <int> {
                11, 12, 13, 14, 15, 16, 17, 18, 19, 20
            }.Select(i =>
            {
                Thread.Sleep(50);
                return(new tb_product
                {
                    产品ID = Guid.NewGuid(),
                    产品名称 = string.Format("Product{0:D6}", i),
                    分类编号 = multi_category[i % 7].子ID,
                    进价 = (float)new Random().NextDouble(),
                    运费 = (decimal) new Random().NextDouble(),
                    税率 = (decimal) new Random().NextDouble(),
                    零售价 = (decimal) new Random().NextDouble() * 100,
                    会员折扣 = new Random().NextDouble(),
                    产品描述_中文 = "中文",
                    产品描述_英文 = "English",
                    RSS = "<root><product></product></root>",
                    //附件1 = "", //参考[头像]
                    //附件2 = "",
                    //版本 timestamp //无须指定
                });
            }).ToList();
            var dyQuery = new DyQuery <tb_user>()
                          .Insert(user1).Insert(multi_user).Insert(multi_category)
                          .Insert(multi_products).AsQuery();
            var json = localDy.Done(dyQuery).AsJson();

            Console.WriteLine(json);
            Thread.Sleep(50);


            //添加订单
            List <tb_user> userList = new List <tb_user>();

            userList.Add(user1);
            userList.AddRange(multi_user);
            userList.AddRange(multi_user_batch);

            for (int i = 0; i < 100; i++)
            {
                var user  = userList[new Random().Next(0, 19)];
                var order = new tb_order
                {
                    订单ID = Guid.NewGuid(),
                    订单名称 = DateTime.Now.ToShortDateString() + string.Format("{0:D4}", i),
                    订单时间 = DateTime.Now.AddDays(new Random().Next(1, 180)),
                    账号   = user.账号
                };

                List <tb_order_detail> details = new List <tb_order_detail>();
                var count = new Random().Next(2, 7); Thread.Sleep(50);
                for (int j = 0; j < count; j++)
                {
                    var product = multi_products[new Random().Next(0, 9)]; Thread.Sleep(50);
                    details.Add(new tb_order_detail
                    {
                        订单明细ID = Guid.NewGuid(),
                        订单ID   = order.订单ID,
                        产品ID   = product.产品ID,
                        产品名称   = product.产品名称,
                        序号     = j,
                        零售价    = product.零售价,
                        购买数量   = 100 - i,
                        支付价    = product.零售价 * (decimal)product.会员折扣 * (decimal)(1 - user.会员等级.ToString().Length * 0.1)
                    });
                }
                order.总金额 = details.Sum(t => t.支付价);

                var dyQuery2 = new DyQuery <tb_order>().Insert(order).Insert(details).AsQuery();
                var json2    = localDy.Done(dyQuery2).AsJson();
                Console.WriteLine(json2);
                Thread.Sleep(50);
            }
        }
Exemplo n.º 8
0
        public static void 测试_删除()
        {
            //List<tb_user> userList = new List<tb_user>()
            //{
            //    new tb_user { 账号 = "U0002" },
            //    new tb_user { 账号 = "U0003" }
            //};
            //var query = new DyQuery<tb_user>().Delete(new tb_user { 账号 = "U0001" }).Delete(userList).AsQuery();
            //var rowCount = dy.Query(query).RowCount;
            //if (rowCount == 1 /*new tb_user { 账号 = "U0001" }*/+ userList.Count)
            //{
            //    //成功
            //}
            //else {
            //    //失败
            //}

            ////根据条件删除
            //var query = new DyQuery<tb_user>().Delete().Where(t1 => t1.用户名.Dy_EndsWith("3") && t1.年龄 > 20).AsQuery();
            //var rowCount = dy.Query(query).RowCount;

            //删除指定用户
            //根据实例删除
            var userQuery       = new DyQuery <tb_user>().Where(t1 => t1.用户名.Dy_EndsWith("2")).AsQuery();
            var userList        = localDy.Done(userQuery).AsTList <tb_user>();
            var deleteUserQuery = new DyQuery <tb_user>().Delete(userList).AsQuery();
            var json1           = localDy.Done(deleteUserQuery).AsJson();

            Console.WriteLine(json1);

            //根据条件删除
            var userQuery2 = new DyQuery <tb_user>().Delete().Where(t1 => t1.用户名.Dy_EndsWith("3") && t1.年龄 > 20).AsQuery();
            var json2      = localDy.Done(userQuery2).AsJson();

            Console.WriteLine(json2);


            //产品实例删除 带timestamp版本号
            var productQuery       = new DyQuery <tb_product>().Where(t1 => t1.产品名称.Dy_Contains("1"));
            var products           = localDy.Done(productQuery).AsTList <tb_product>();
            var deleteProductQuery = new DyQuery <tb_product>().Delete(products).AsQuery();
            var json3 = localDy.Done(deleteProductQuery).AsJson();

            Console.WriteLine(json3);

            //用户删除 带v版本控制
            var query1 = new DyQuery <tb_user>().Where(t1 => t1.消费能力 >= 50).AsQuery();
            var ulist  = localDy.Done(query1).AsTList <tb_user>();
            //Thread.Sleep(10000);//打开数据库,去修改对应表的v字段版本号
            var delQuery1 = new DyQuery <tb_user>().Delete(ulist).AsQuery();
            var result4   = localDy.Done(delQuery1);

            if (result4.RowCount == ulist.Count)
            {
                //内部开启事务
                Console.WriteLine("删除成功");
            }
            else
            {
                Console.WriteLine("删除失败");
            }
            Console.WriteLine(result4.AsJson());
        }