{"id":16193410,"url":"https://github.com/dotnetnext/oraclesugar","last_synced_at":"2026-03-06T18:41:46.118Z","repository":{"id":137494150,"uuid":"68136837","full_name":"DotNetNext/OracleSugar","owner":"DotNetNext","description":"net 4.0+ Oracle ORM SqlSugarORM is the fastest, Simple,Easy API: See README.md ","archived":false,"fork":false,"pushed_at":"2017-01-19T08:22:37.000Z","size":8863,"stargazers_count":25,"open_issues_count":4,"forks_count":18,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-02-28T15:18:07.484Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DotNetNext.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-13T18:41:18.000Z","updated_at":"2022-04-22T05:52:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"c03bbf97-ee85-41d7-b912-08c8ce1ebc2f","html_url":"https://github.com/DotNetNext/OracleSugar","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DotNetNext%2FOracleSugar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DotNetNext%2FOracleSugar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DotNetNext%2FOracleSugar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DotNetNext%2FOracleSugar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DotNetNext","download_url":"https://codeload.github.com/DotNetNext/OracleSugar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243968477,"owners_count":20376400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T08:14:49.154Z","updated_at":"2026-03-06T18:41:41.090Z","avatar_url":"https://github.com/DotNetNext.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"#Contact information\n\nEmail 610262374@qq.com\n\nQQ Group 225982985\n\nBlog http://www.cnblogs.com/sunkaixuan\n\n\n#All versions\nASP.NET 4.0+ (MSSQL , MYSQL ORACLE ,SQLITE Four in one) https://github.com/sunkaixuan/SqlSugarRepository\n\nASP.NET 4.0+ MSSQL   https://github.com/sunkaixuan/SqlSugar\n\nASP.NET CORE MSSQL   https://github.com/sunkaixuan/ASP_NET_CORE_ORM_SqlSugar\n\nASP.NET 4.0+ MYSQL   https://github.com/sunkaixuan/MySqlSugar\n\nASP.NET CORE MYSQL   https://github.com/sunkaixuan/ASP_NET_CORE_ORM_MySqlSugar\n\nASP.NET 4.0+ Sqlite  https://github.com/sunkaixuan/SqliteSugar\n\nASP.NET CORE Sqlite  https://github.com/sunkaixuan/ASP_NET_CORE_ORM_SqliteSugar\n\nASP.NET 4.0+ ORACLE  https://github.com/sunkaixuan/OracleSugar\n\nASP.NET CORE ORACLE  https://github.com/sunkaixuan/ASP_NET_CORE_ORM_OracleSugar\n\n\n\n# OracleSugar一款高性能ORM框架\n\n\u003ch3 id=\"h3-1-\"\u003e\u003ca name=\"1. 设置生成实体的数值类型\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e1. 设置生成实体的数值类型\u003c/h3\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003enumber长度\u003c/th\u003e\n\u003cth\u003e实体类型\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003ebool\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003ebyte\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4\u003c/td\u003e\n\u003ctd\u003eshort\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e9\u003c/td\u003e\n\u003ctd\u003eint\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e18\u003c/td\u003e\n\u003ctd\u003elong\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e修改设置\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003eOracleConfig.OracleNumberTypeMapping =new Dictionary\u0026lt;int, string\u0026gt;()\n        {\n            {1,\"bool\"},\n            {3,\"byte\"},\n            {4,\"short\"},\n            {9,\"int\"},\n            {18,\"long\"}\n        };\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"h3-2-\"\u003e\u003ca name=\"2. 数据连接设置\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e2. 数据连接设置\u003c/h3\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003eusing(var db = new SqlSugarClient(ConnectionString)){\n\n    //use object\n    var list=db.Queryable\u0026lt;T\u0026gt;().ToList();\n\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"h3-3-sql-\"\u003e\u003ca name=\"3.设置序列（相当于SQL里面的自增列）\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e3.设置序列（相当于SQL里面的自增列）\u003c/h3\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003e  OracleConfig.SequenceMapping = new List\u0026lt;SequenceModel\u0026gt;()\n            {\n                  new SequenceModel(){ ColumnName=\"ID\", TableName=\"STUDENT\", Value=\"SEQ\"/*序列的名称*/} //可以多个\n            };\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"h3-4-\"\u003e\u003ca name=\"4.查询\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e4.查询\u003c/h3\u003e\u003ch4 id=\"h4-4-1-\"\u003e\u003ca name=\"4.1 拉姆达查询\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e4.1 拉姆达查询\u003c/h4\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003evar test = db.Queryable\u0026lt;Models.Test\u0026gt;().Where(it =\u0026gt; it.C_BOB != null).ToList();\n\n//查询所有\nvar student = db.Queryable\u0026lt;Student\u0026gt;().ToList();\nvar studentDynamic = db.Queryable\u0026lt;Student\u0026gt;().ToDynamic();\nvar studentJson = db.Queryable\u0026lt;Student\u0026gt;().ToJson();\n\n\n//查询单条\nvar single = db.Queryable\u0026lt;Student\u0026gt;().Single(c =\u0026gt; c.id == 1);\n//查询单条根据主键\nvar singleByPk = db.Queryable\u0026lt;Student\u0026gt;().InSingle(1);\n//查询单条没有记录返回空对象\nvar singleOrDefault = db.Queryable\u0026lt;Student\u0026gt;().SingleOrDefault(c =\u0026gt; c.id == 11111111);\n//查询单条没有记录返回空对象\nvar single2 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id == 1).SingleOrDefault();\n\n//查询第一条\nvar first = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id == 1).First();\nvar first2 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id == 1).FirstOrDefault();\n\n//取11-20条\nvar page1 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 10).OrderBy(it =\u0026gt; it.id).Skip(10).Take(10).ToList();\n\n//取11-20条  等于 Skip(pageIndex-1)*pageSize).Take(pageSize) 等于  between (pageIndex-1)*pageSize and  pageIndex*pageSize\nvar page2 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 10).OrderBy(it =\u0026gt; it.id).ToPageList(2, 10);\n\n//查询条数\nvar count = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 10).Count();\n\n//从第2条开始以后取所有\nvar skip = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 10).OrderBy(it =\u0026gt; it.id).Skip(2).ToList();\n\n//取前2条\nvar take = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 10).OrderBy(it =\u0026gt; it.id).Take(2).ToList();\n\n//Not like \nstring conval = \"a\";\nvar notLike = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; !c.name.Contains(conval.ToString())).ToList();\n\n//Like\nconval = \"三\";\nvar like = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name.Contains(conval)).ToList();\n\n//支持字符串Where 让你解决，更复杂的查询\nvar student12 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; \"a\" == \"a\").Where(\"id\u0026gt;:id\", new { id = 1 }).ToList();\nvar student13 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; \"a\" == \"a\").Where(\"id\u0026gt;100 and id in( select 1 from dual )\").ToList();\n\n\n//存在记录反回true，则否返回false\nbool isAny100 = db.Queryable\u0026lt;Student\u0026gt;().Any(c =\u0026gt; c.id == 100);\nbool isAny1 = db.Queryable\u0026lt;Student\u0026gt;().Any(c =\u0026gt; c.id == 1);\n\n\n//获取最大Id\nobject maxId = db.Queryable\u0026lt;Student\u0026gt;().Max(it =\u0026gt; it.id);\nint maxId1 = db.Queryable\u0026lt;Student\u0026gt;().Max(it =\u0026gt; it.id).ObjToInt();//拉姆达\nint maxId2 = db.Queryable\u0026lt;Student\u0026gt;().Max\u0026lt;int\u0026gt;(\"id\"); //字符串写法\n\n//获取最小\nint minId1 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 0).Min(it =\u0026gt; it.id).ObjToInt();//拉姆达\nint minId2 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026gt; 0).Min\u0026lt;int\u0026gt;(\"id\");//字符串写法\n\n\n//order By \nvar orderList = db.Queryable\u0026lt;Student\u0026gt;().OrderBy(\"id desc,name asc\").ToList();//字符串支持多个排序\n//可以多个order by表达示\nvar order2List = db.Queryable\u0026lt;Student\u0026gt;().OrderBy(it =\u0026gt; it.name).OrderBy(it =\u0026gt; it.id, OrderByType.desc).ToList(); // order by name as ,order by id desc\n\n//In\nvar intArray = new[] { \"5\", \"2\", \"3\" };\nvar intList = intArray.ToList();\nvar listnew = db.Queryable\u0026lt;Student\u0026gt;().Where(it =\u0026gt; intArray.Contains(it.name)).ToList();\nvar list0 = db.Queryable\u0026lt;Student\u0026gt;().In(it =\u0026gt; it.id, 1, 2, 3).ToList();\nvar list1 = db.Queryable\u0026lt;Student\u0026gt;().In(it =\u0026gt; it.id, intArray).ToList();\nvar list2 = db.Queryable\u0026lt;Student\u0026gt;().In(\"id\", intArray).ToList();\nvar list3 = db.Queryable\u0026lt;Student\u0026gt;().In(it =\u0026gt; it.id, intList).ToList();\nvar list4 = db.Queryable\u0026lt;Student\u0026gt;().In(\"id\", intList).ToList();\nvar list6 = db.Queryable\u0026lt;Student\u0026gt;().In(intList).ToList();//不设置字段默认主键\n\n//分组查询\nvar list7 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026lt; 20).GroupBy(it =\u0026gt; it.sex).Select(\"sex,count(*) Count\").ToDynamic();\nvar list8 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026lt; 20).GroupBy(it =\u0026gt; it.sex).GroupBy(it =\u0026gt; it.id).Select(\"id,sex,count(*) Count\").ToDynamic();\nList\u0026lt;StudentGroup\u0026gt; list9 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026lt; 20).GroupBy(it =\u0026gt; it.sex).Select\u0026lt;StudentGroup\u0026gt;(\"Sex,count(*) Count\").ToList();\nList\u0026lt;StudentGroup\u0026gt; list10 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id \u0026lt; 20).GroupBy(\"sex\").Select\u0026lt;StudentGroup\u0026gt;(\"Sex,count(*) Count\").ToList();\n//SELECT Sex,Count=count(*)  FROM Student  WHERE 1=1  AND  (id \u0026lt; 20)    GROUP BY Sex --生成结果\n\n\n\n//2表关联查询\nvar jList = db.Queryable\u0026lt;Student\u0026gt;()\n    .JoinTable\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.sch_id == s2.id) //默认left join\n    .Where\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.id == 1)\n    .Select(\"s1.*,s2.name as schName\")\n    .ToDynamic();\n\n/*等于同于\n                 SELECT s1.*,s2.name as schName \n                 FROM [Student]  s1 \n                 LEFT JOIN [School]  s2 ON  s1.sch_id  = s2.id \n                 WHERE  s1.id  = 1 */\n\n//2表关联查询并分页\nvar jList2 = db.Queryable\u0026lt;Student\u0026gt;()\n    .JoinTable\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.sch_id == s2.id) //默认left join\n    //如果要用inner join这么写\n    //.JoinTable\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.sch_id == s2.id ,JoinType.INNER)\n    .Where\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.id \u0026gt; 1)\n    .OrderBy(s1 =\u0026gt; s1.name)\n    .Skip(10)\n    .Take(20)\n    .Select(\"s1.*,s2.name as schName\")\n    .ToDynamic();\n\n//3表查询并分页\nvar jList3 = db.Queryable\u0026lt;Student\u0026gt;()\n    .JoinTable\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.sch_id == s2.id) // left join  School s2  on s1.id=s2.id\n    .JoinTable\u0026lt;School\u0026gt;((s1, s3) =\u0026gt; s1.sch_id == s3.id) // left join  School s3  on s1.id=s3.id\n    .Where\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.id \u0026gt; 1)  // where s1.id\u0026gt;1\n    .Where(s1 =\u0026gt; s1.id \u0026gt; 0)\n    .OrderBy\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.id) //order by s1.id 多个order可以  .oderBy().orderby 叠加 \n    .Skip(10)\n    .Take(20)\n    .Select(\"s1.*,s2.name as schName,s3.name as schName2\")//select目前只支持这种写法\n    .ToDynamic();\n\n\n//上面的方式都是与第一张表join，第三张表想与第二张表join写法如下\nList\u0026lt;V_Student\u0026gt; jList4 =\n    db.Queryable\u0026lt;Student\u0026gt;()\n    .JoinTable\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.sch_id == s2.id) // left join  School s2  on s1.id=s2.id\n    .JoinTable\u0026lt;School, Area\u0026gt;((s1, s2, a1) =\u0026gt; a1.id == s2.AreaId)// left join  Area a1  on a1.id=s2.AreaId  第三张表与第二张表关联\n        .JoinTable\u0026lt;Area, School\u0026gt;((s1, a1, s3) =\u0026gt; a1.id == s3.AreaId)// left join  School s3  on a1.id=s3.AreaId  第四第表第三张表关联\n            .JoinTable\u0026lt;School\u0026gt;((s1, s4) =\u0026gt; s1.sch_id == s4.id) // left join  School s2  on s1.id=s4.id\n            .Select\u0026lt;School, Area, V_Student\u0026gt;((s1, s2, a1) =\u0026gt; new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name }).ToList();\n\n//等同于\n//SELECT id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name  \n//FROM [Student]   s1 \n//LEFT JOIN School  s2 ON  ( s1.sch_id  = s2.id )    \n//LEFT JOIN Area  a1 ON  ( a1.id  = s2.AreaId )     //第三张表与第二张表关联\n//LEFT JOIN School  s3 ON  ( a1.id  = s3.AreaId )   //第四张表与第三张表关联\n//LEFT JOIN School  s4 ON  ( s1.sch_id  = s4.id )    \n//WHERE 1=1    \n\n\n//Join子查询语句加分页的写法\nvar childQuery = db.Queryable\u0026lt;Area\u0026gt;().Where(\"id=:id\").Select(it =\u0026gt; new { id = it.id }).ToSql();//创建子查询SQL\nstring childTableName =SqlSugarTool.PackagingSQL(childQuery.Key);//将SQL语句用()包成表\nvar queryable = db.Queryable\u0026lt;Student\u0026gt;()\n    .JoinTable\u0026lt;School\u0026gt;((s1, s2) =\u0026gt; s1.sch_id == s2.id)  //LEFT JOIN School  s2 ON  ( s1.sch_id  = s2.id )  \n    .JoinTable(childTableName, \"a1\", \"a1.id=s2.areaid\", new { id = 1 }, JoinType.INNER) //INNER JOIN (SELECT *  FROM [Area]   WHERE 1=1  AND id=@id   ) a1 ON a1.id=s2.areaid\n    .OrderBy(s1 =\u0026gt; s1.id);\n\nvar list = queryable.Select\u0026lt;School, Area, V_Student\u0026gt;((s1, s2, a1) =\u0026gt; new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name })\n    .ToPageList(0, 200);\nvar count2 = queryable.Count();\n\n\n//拼接例子\nvar queryable2 = db.Queryable\u0026lt;Student\u0026gt;().Where(it =\u0026gt; true);\nif (maxId.ObjToInt() == 1)\n{\n    queryable2.Where(it =\u0026gt; it.id == 1);\n}\nelse\n{\n    queryable2.Where(it =\u0026gt; it.id == 2);\n}\nvar listJoin = queryable2.ToList();\n\n\n//queryable和SqlSugarClient解耦\nvar par = new Queryable\u0026lt;Student\u0026gt;().Where(it =\u0026gt; it.id == 1);//声名没有connection对象的Queryable\npar.DB = db;\nvar listPar = par.ToList();\n\n\n//查看生成的sql和参数\nvar id = 1;\nvar sqlAndPars = db.Queryable\u0026lt;Student\u0026gt;().Where(it =\u0026gt; it.id == id).OrderBy(it =\u0026gt; it.id).ToSql();\n\n\n\n//拉姆达支持的函数操作\nvar par1 = \"2015-1-1\"; var par2 = \"   我 有空格A, \";\nvar r1 = db.Queryable\u0026lt;Student\u0026gt;().Where(it =\u0026gt; it.name == par1.ObjToString()).ToList(); //ObjToString会将null转转成\"\"\nvar r2 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(it =\u0026gt; it.d1 == par1.ObjToDate()).ToList();\nvar r3 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(it =\u0026gt; it.id == 1.ObjToInt()).ToList();//ObjToInt会将null转转成0\nvar r4 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(it =\u0026gt; it.id == 2.ObjToDecimal()).ToList();\nvar r5 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(it =\u0026gt; it.id == 3.ObjToMoney()).ToList();\nvar r6 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(it =\u0026gt; it.v1 == par2.Trim()).ToList();\nvar convert1 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name == \"a\".ToString()).ToList();\nvar convert2 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.id == Convert.ToInt32(\"1\")).ToList();\nvar convert3 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name == par2.ToLower()).ToList();\nvar convert4 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name == par2.ToUpper()).ToList();\nvar convert5= db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; DateTime.Now \u0026gt; Convert.ToDateTime(\"2015-1-1\")).ToList();\nvar c1 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name.Contains(\"a\")).ToList();\nvar c2 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name.StartsWith(\"a\")).ToList();\nvar c3 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name.EndsWith(\"a\")).ToList();\nvar c4 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; !string.IsNullOrEmpty(c.name)).ToList();\nvar c5 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name.Equals(\"小杰\")).ToList();\nvar c6 = db.Queryable\u0026lt;Student\u0026gt;().Where(c =\u0026gt; c.name.Length \u0026gt; 4).ToList();\nvar time = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(c =\u0026gt; c.d1\u0026gt;DateTime.Now.AddDays(1)).ToList();\nvar time2 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(c =\u0026gt; c.d1 \u0026gt; DateTime.Now.AddYears(1)).ToList();\nvar time3 = db.Queryable\u0026lt;InsertTest\u0026gt;().Where(c =\u0026gt; c.d1 \u0026gt; DateTime.Now.AddMonths(1)).ToList();\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch4 id=\"h4-4-2-sql-\"\u003e\u003ca name=\"4.2 原生SQL的支持\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e4.2 原生SQL的支持\u003c/h4\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003e//转成list\nList\u0026lt;Student\u0026gt; list1 = db.SqlQuery\u0026lt;Student\u0026gt;(\"select * from Student\");\n//转成list带参\nList\u0026lt;Student\u0026gt; list2 = db.SqlQuery\u0026lt;Student\u0026gt;(\"select * from Student where id=:id\", new { id = 1 });\n//转成dynamic\ndynamic list3 = db.SqlQueryDynamic(\"select * from student\");\n//转成json\nstring list4 = db.SqlQueryJson(\"select * from student\");\n//返回int\nvar list5 = db.SqlQuery\u0026lt;int\u0026gt;(\"select id from Student where rownum\u0026lt;=1\").SingleOrDefault();\n//反回键值\nDictionary\u0026lt;string, string\u0026gt; list6 = db.SqlQuery\u0026lt;KeyValuePair\u0026lt;string, string\u0026gt;\u0026gt;(\"select id,name from Student\").ToDictionary(it =\u0026gt; it.Key, it =\u0026gt; it.Value);\n//反回List\u0026lt;string[]\u0026gt;\nvar list7 = db.SqlQuery\u0026lt;string[]\u0026gt;(\"select   id,name from Student where rownum\u0026lt;=1\").SingleOrDefault();\n//存储过程\n// var spResult = db.SqlQuery\u0026lt;School\u0026gt;(\"exec sp_school @p1,@p2\", new { p1 = 1, p2 = 2 }); 现是SQL写i法请成ORACLE写法\n\n//存储过程加Output \n//var pars = SqlSugarTool.GetParameters(new { p1 = 1,p2=0 }); //将匿名对象转成SqlParameter\n//db.IsClearParameters = false;//禁止清除参数\n//pars[1].Direction = ParameterDirection.Output; //将p2设为 output\n//var spResult2 = db.SqlQuery\u0026lt;School\u0026gt;(\"exec sp_school @p1,@p2 output\", pars);现是SQL写i法请成ORACLE写法\n//db.IsClearParameters = true;//启用清除参数\n//var outPutValue = pars[1].Value;//获取output @p2的值\n\n\n////存储过程优化操作\n//var pars2 = SqlSugarTool.GetParameters(new { p1 = 1, p2 = 0 }); //将匿名对象转成SqlParameter\n//db.CommandType = CommandType.StoredProcedure;//指定为存储过程可比上面少写EXEC和参数\n//var spResult3 = db.SqlQuery\u0026lt;School\u0026gt;(\"sp_school\", pars2);现是SQL写i法请成ORACLE写法\n//db.CommandType = CommandType.Text;//还原回默认\n\n\n//获取第一行第一列的值\nstring v1 = db.GetString(\"select '张三' as name from dual\");\nint v2 = db.GetInt(\"select 1 as name  from dual\");\ndouble v3 = db.GetDouble(\"select 1 as name  from dual\");\ndecimal v4 = db.GetDecimal(\"select 1 as name  from dual\");\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch4 id=\"h4-4-3-sql-\"\u003e\u003ca name=\"4.3 Sql拼接器\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e4.3 Sql拼接器\u003c/h4\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003e//---------Sqlable,创建多表查询---------//\n\n//多表查询\nList\u0026lt;School\u0026gt; dataList = db.Sqlable()\n    .From(\"school\", \"s\")\n    .Join(\"student\", \"st\", \"st.id\", \"s.id\", JoinType.INNER)\n    .Join(\"student\", \"st2\", \"st2.id\", \"st.id\", JoinType.LEFT)\n    .Where(\"s.id\u0026gt;100 and s.id\u0026lt;:id\")\n    .Where(\"1=1\")//可以多个WHERE\n    .OrderBy(\"s.id\")\n    .SelectToList\u0026lt;School/*新的Model我这里没有所以写的School*/\u0026gt;(\"st.*\", new { id = 1 });\n\n//多表分页\nList\u0026lt;School\u0026gt; dataPageList = db.Sqlable()\n    .From(\"school\", \"s\")\n    .Join(\"student\", \"st\", \"st.id\", \"s.id\", JoinType.INNER)\n    .Join(\"student\", \"st2\", \"st2.id\", \"st.id\", JoinType.LEFT)\n    .Where(\"s.id\u0026gt;100 and s.id\u0026lt;100\")\n    .SelectToPageList\u0026lt;School\u0026gt;(\"st.*\", \"s.id\", 1, 10);\n\n//多表分页WHERE加子查询\nList\u0026lt;School\u0026gt; dataPageList2 = db.Sqlable()\n    .From(\"school\", \"s\")\n    .Join(\"student\", \"st\", \"st.id\", \"s.id\", JoinType.INNER)\n    .Join(\"student\", \"st2\", \"st2.id\", \"st.id\", JoinType.LEFT)\n    .Where(\"s.id\u0026gt;100 and s.id\u0026lt;100 and s.id in (select 1  from dual )\" /*这里面写子查询都可以*/)\n    .SelectToPageList\u0026lt;School\u0026gt;(\"st.*\", \"s.id\", 1, 10);\n\n\n\n//--------转成List Dynmaic 或者 Json-----//\n\n//不分页\nvar list1 = db.Sqlable().From(\"student\", \"s\").Join(\"school\", \"l\", \"s.sch_id\", \"l.id and l.id=:id\", JoinType.INNER).SelectToDynamic(\"*\", new { id = 1 });\nvar list2 = db.Sqlable().From(\"student\", \"s\").Join(\"school\", \"l\", \"s.sch_id\", \"l.id and l.id=:id\", JoinType.INNER).SelectToJson(\"*\", new { id = 1 });\nvar list3 = db.Sqlable().From(\"student\", \"s\").Join(\"school\", \"l\", \"s.sch_id\", \"l.id and l.id=:id\", JoinType.INNER).SelectToDataTable(\"*\", new { id = 1 });\n\n//分页\nvar list4 = db.Sqlable().From(\"student\", \"s\").Join(\"school\", \"l\", \"s.sch_id\", \"l.id and l.id=:id\", JoinType.INNER).SelectToPageDynamic(\"s.*\", \"l.id\", 1, 10, new { id = 1 });\nvar list5 = db.Sqlable().From(\"student\", \"s\").Join(\"school\", \"l\", \"s.sch_id\", \"l.id and l.id=:id\", JoinType.INNER).SelectToPageTable(\"s.*\", \"l.id\", 1, 10, new { id = 1 });\nvar list6 = db.Sqlable().From(\"student\", \"s\").Join(\"school\", \"l\", \"s.sch_id\", \"l.id and l.id=:id\", JoinType.INNER).SelectToPageDynamic(\"s.*\", \"l.id\", 1, 10, new { id = 1 });\n\n\n//--------拼接-----//\nSqlable sable = db.Sqlable().From\u0026lt;Student\u0026gt;(\"s\").Join\u0026lt;School\u0026gt;(\"l\", \"s.sch_id\", \"l.id\", JoinType.INNER);\nstring name = \"a\";\nint id = 1;\nif (!string.IsNullOrEmpty(name))\n{\n    sable = sable.Where(\"s.name=:name\");\n}\nif (!string.IsNullOrEmpty(name))\n{\n    sable = sable.Where(\"s.id=:id or s.id=100\");\n}\nif (id \u0026gt; 0)\n{\n    sable = sable.Where(\"l.id in (select  id from school where rownum\u0026lt;10)\");//where加子查询\n}\nvar pars = new { id = id, name = name };\nint pageCount = sable.Count(pars);\nvar list7 = sable.SelectToPageList\u0026lt;Student\u0026gt;(\"s.*\", \"l.id desc\", 1, 20, pars);\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"h3-5-\"\u003e\u003ca name=\"5.插入\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e5.插入\u003c/h3\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003edb.Insert(GetInsertItem()); //插入一条记录 (有主键也好，没主键也好，有自增列也好都可以插进去)\n\n\ndb.InsertRange(GetInsertList()); //批量插入 支持（别名表等功能）\n\n\ndb.SqlBulkCopy(GetInsertList()); //批量插入 适合海量数据插入\n\n\n\n//设置不插入列\ndb.DisableInsertColumns = new string[] { \"sex\" };//sex列将不会插入值\nStudent s = new Student()\n{\n    name = \"张\" + new Random().Next(1, int.MaxValue),\n    sex = \"gril\"\n};\n\nvar id = db.Insert(s); //插入\n\n//查询刚插入的sex是否有值\nvar sex = db.Queryable\u0026lt;Student\u0026gt;().Single(it =\u0026gt; it.id == id.ObjToInt()).sex;//无值\nvar name = db.Queryable\u0026lt;Student\u0026gt;().Single(it =\u0026gt; it.id == id.ObjToInt()).name;//有值\n\n\n//SqlBulkCopy同样支持不挺入列设置\ndb.SqlBulkCopy(GetInsertList());\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"h3-6-\"\u003e\u003ca name=\"6.更新\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e6.更新\u003c/h3\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003e//指定列更新\ndb.Update\u0026lt;School\u0026gt;(new { name = \"蓝翔14\" }, it =\u0026gt; it.id == 14); //只更新name列\ndb.Update\u0026lt;School, int\u0026gt;(new { name = \"蓝翔11 23 12\", areaId = 2 }, 11, 23, 12);\ndb.Update\u0026lt;School, string\u0026gt;(new { name = \"蓝翔2\" }, new string[] { \"11\", \"21\" });\ndb.Update\u0026lt;School\u0026gt;(new { name = \"蓝翔2\" }, it =\u0026gt; it.id == 100);\nvar array=new int[]{1,2,3};\ndb.Update\u0026lt;School\u0026gt;(new { name = \"蓝翔2\" }, it =\u0026gt; array.Contains(it.id));// id in 1,2,3\n\n\n//支持字典更新，适合动态权限\nvar dic = new Dictionary\u0026lt;string, string\u0026gt;();\ndic.Add(\"name\", \"第十三条\");\ndic.Add(\"areaId\", \"1\");\ndb.Update\u0026lt;School, int\u0026gt;(dic, 13);\n\n\n//整个实体更新\ndb.Update(new School { id = 16, name = \"蓝翔16\", AreaId = 1 });\ndb.Update\u0026lt;School\u0026gt;(new School { id = 12, name = \"蓝翔12\", AreaId = 2 }, it =\u0026gt; it.id == 18);\ndb.Update\u0026lt;School\u0026gt;(new School() { id = 11, name = \"青鸟11\" });\n\n//设置不更新列\ndb.DisableUpdateColumns = new string[] { \"CreateTime\" };//设置CreateTime不更新\n\nTestUpdateColumns updObj = new TestUpdateColumns()\n{\n    VGUID = Guid.Parse(\"542b5a27-6984-47c7-a8ee-359e483c8470\"),\n    Name = \"xx\",\n    Name2 = \"xx2\",\n    IdentityField = 0,\n    CreateTime = null\n};\n\n//CreateTime将不会被更新\ndb.Update(updObj);\n//以前实现这种更新需要用指定列的方式实现，现在就简单多了。\n\n\n\n//批量更新   数据量小时建议使用\nvar updateResult = db.UpdateRange(GetUpdateList());\n\n//批量更新  数据量大时建议使用\nvar updateResult2 = db.SqlBulkReplace(GetUpdateList2());\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"h3-7-\"\u003e\u003ca name=\"7.删除\" class=\"reference-link\"\u003e\u003c/a\u003e\u003cspan class=\"header-link octicon octicon-link\"\u003e\u003c/span\u003e7.删除\u003c/h3\u003e\u003cpre\u003e\u003ccode class=\"lang-csharp\"\u003e//删除根据主键\ndb.Delete\u0026lt;School, int\u0026gt;(10);\n\n//删除根据表达示\ndb.Delete\u0026lt;School\u0026gt;(it =\u0026gt; it.id \u0026gt; 100);//支持it=\u0026gt;array.contains(it.id)\n\n//主键批量删除\ndb.Delete\u0026lt;School, string\u0026gt;(new string[] { \"100\", \"101\", \"102\" });\n\n//非主键批量删除\ndb.Delete\u0026lt;School, string\u0026gt;(it =\u0026gt; it.name, new string[] { \"\" });\ndb.Delete\u0026lt;School, int\u0026gt;(it =\u0026gt; it.id, new int[] { 20, 22 });\n\n\n//根据实体赋值实体一定要有主键，并且要有值。\ndb.Delete(new School() { id = 200 });\n\n//根据字符串删除\ndb.Delete\u0026lt;School\u0026gt;(\"id=@id\", new { id = 100 });\n\n//假删除\n//db.FalseDelete\u0026lt;school\u0026gt;(\"is_del\", 100);\n//等同于 update school set is_del=1 where id in(100)\n//db.FalseDelete\u0026lt;school\u0026gt;(\"is_del\", it=\u0026gt;it.id==100);\n\u003c/code\u003e\u003c/pre\u003e\n\"\n\n### 8.Tran\n```csharp\nusing (SqlSugarClient db = SugarDao.GetInstance())\n{\n\tdb.IsNoLock = true; \n\tdb.CommandTimeOut = 30000; \n\ttry\n\t{\n\t\tdb.BeginTran();\n\t\t//db.BeginTran(IsolationLevel.ReadCommitted);+3\n\n\t\tdb.CommitTran();\n\t}\n\tcatch (Exception)\n\t{\n\t\tdb.RollbackTran();\n\t\tthrow;\n\t}\n}\n```\n\n### 9.Rename tables\n```csharp\npublic class MappingTable : IDemos\n{\n\n\tpublic void Init()\n\t{\n\t\tConsole.WriteLine(\"启动MappingTable.Init\");\n\n\t\t//单个设置\n\t\tusing (var db = SugarDao.GetInstance())\n\t\t{\n\t\t\tvar list = db.Queryable\u003cV_Student\u003e(\"Student\").ToList();//查询的是 select * from student 而我的实体名称为V_Student\n\t\t}\n\n\n\t\t//全局设置\n\t\tusing (var db = SugarFactory.GetInstance())\n\t\t{\n\t\t\tvar list = db.Queryable\u003cV_Student\u003e().ToList();//查询的是 select * from student 而我的实体名称为V_Student\n\t\t}\n\t}\n\n\n\t/// \u003csummary\u003e\n\t/// 全局配置类\n\t/// \u003c/summary\u003e\n\tpublic class SugarConfigs\n\t{\n\t\t//key类名 value表名\n\t\tpublic static List\u003cKeyValue\u003e MpList = new List\u003cKeyValue\u003e(){\n\t\t\tnew KeyValue(){ Key=\"FormAttr\", Value=\"Flow_FormAttr\"},\n\t\t\t\tnew KeyValue(){ Key=\"Student3\", Value=\"Student\"},\n\t\t\t\tnew KeyValue(){ Key=\"V_Student\", Value=\"Student\"}\n\t\t};\n\t}\n\n\t/// \u003csummary\u003e\n\t/// SqlSugar实例工厂\n\t/// \u003c/summary\u003e\n\tpublic class SugarFactory\n\t{\n\n\t\t//禁止实例化\n\t\tprivate SugarFactory()\n\t\t{\n\n\t\t}\n\t\tpublic static SqlSugarClient GetInstance()\n\t\t{\n\t\t\tstring connection = SugarDao.ConnectionString; //这里可以动态根据cookies或session实现多库切换\n\t\t\tvar db = new SqlSugarClient(connection);\n\n\t\t\tdb.SetMappingTables(SugarConfigs.MpList);//设置关联表 (引用地址赋值，每次赋值都只是存储一个内存地址)\n\n\n\n\t\t\t//批量设置别名表\n\t\t\t//db.ClassGenerating.ForeachTables(db, tableName =\u003e\n\t\t\t//{\n\t\t\t//    db.AddMappingTable(new KeyValue() { Key = tableName.Replace(\"bbs.\",\"\"), Value =  tableName }); //key实体名，value表名\n\t\t\t//});\n\n\n\t\t\treturn db;\n\t\t}\n\t}\n}\n```\n\n### 10.Rename Columns\n```csharp\n//别名列的功能\npublic class MappingColumns : IDemos\n{\n\n\tpublic void Init()\n\t{\n\t\tConsole.WriteLine(\"启动MappingColumns.Init\");\n\n\t\t//全局设置\n\t\tusing (var db = SugarFactory.GetInstance())\n\t\t{\n\t\t\tvar list = db.Queryable\u003cStudent\u003e().Where(it=\u003eit.classId==1).ToList();\n\t\t}\n\t}\n\n\tpublic class Student\n\t{\n\n\t\t//id\n\t\tpublic int classId { get; set; }\n\n\t\t//name\n\t\tpublic string className { get; set; }\n\n\t\t//sch_id\n\t\tpublic int classSchoolId { get; set; }\n\n\t\tpublic int isOk { get; set; }\n\t}\n\n\t/// \u003csummary\u003e\n\t/// 全局配置别名列（不区分表）\n\t/// \u003c/summary\u003e\n\tpublic class SugarConfigs\n\t{\n\t\t//key实体字段名 value表字段名 ，KEY唯一否则异常\n\t\tpublic static List\u003cKeyValue\u003e MpList = new List\u003cKeyValue\u003e(){\n\t\t\tnew KeyValue(){ Key=\"classId\", Value=\"id\"},\n\t\t\t\tnew KeyValue(){ Key=\"className\", Value=\"name\"},\n\t\t\t\tnew KeyValue(){ Key=\"classSchoolId\", Value=\"sch_id\"}\n\t\t};\n\t}\n\n\t/// \u003csummary\u003e\n\t/// SqlSugar实例工厂\n\t/// \u003c/summary\u003e\n\tpublic class SugarFactory\n\t{\n\n\t\t//禁止实例化\n\t\tprivate SugarFactory()\n\t\t{\n\n\t\t}\n\t\tpublic static SqlSugarClient GetInstance()\n\t\t{\n\t\t\tstring connection = SugarDao.ConnectionString; //这里可以动态根据cookies或session实现多库切换\n\t\t\tvar db = new SqlSugarClient(connection);\n\t\t\t//注意：只有启动属性映射才可以使用SetMappingColumns\n\t\t\tdb.IsEnableAttributeMapping = true;\n\t\t\tdb.SetMappingColumns(SugarConfigs.MpList);//设置关联列 (引用地址赋值，每次赋值都只是存储一个内存地址)\n\t\t\treturn db;\n\t\t}\n\t}\n}\n```\n\n### 11.Ignore error columns\n```csharp\nusing (var db = SugarDao.GetInstance())\n{\n\tdb.IsIgnoreErrorColumns = true;\n}\n```\n\n### 12.Create class files\n```csharp\ndb.ClassGenerating.CreateClassFiles(db, (\"e:/TestModels\"), \"Models\");\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnetnext%2Foraclesugar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdotnetnext%2Foraclesugar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdotnetnext%2Foraclesugar/lists"}