using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OrmTest { public class Demo1_Queryable { public static void Init() { QueryConditions(); JoinTable(); Async(); NoEntity(); Mapper(); } private static void Mapper() { Console.WriteLine(""); Console.WriteLine("#### Mapper Start ####"); var db = GetInstance(); //Creater Table db.CodeFirst.InitTables(typeof(Tree)); db.DbMaintenance.TruncateTable("tree"); db.Insertable(new Tree() { Id = 1, Name = "root" }).ExecuteCommand(); db.Insertable(new Tree() { Id = 11, Name = "child1",ParentId=1 }).ExecuteCommand(); db.Insertable(new Tree() { Id = 12, Name = "child2",ParentId=1 }).ExecuteCommand(); db.Insertable(new Tree() { Id = 2, Name = "root" }).ExecuteCommand(); db.Insertable(new Tree() { Id = 22, Name = "child3", ParentId = 2 }).ExecuteCommand(); var list=db.Queryable() //parent=(select * from parent where id=it.parentid) .Mapper(it=>it.Parent,it=>it.ParentId, it=>it.Parent.Id) //Child=(select * from parent where ParentId=it.id) .Mapper(it => it.Child, it => it.Id, it => it.Parent.ParentId) .ToList(); Console.WriteLine("#### End Start ####"); } private static void NoEntity() { Console.WriteLine(""); Console.WriteLine("#### No Entity Start ####"); var db = GetInstance(); var list = db.Queryable().AS("order ").Where("id=id", new { id = 1 }).ToList(); var list2 = db.Queryable("o").AS("order").AddJoinInfo("OrderDetail", "i", "o.id=i.OrderId").Where("id=id", new { id = 1 }).Select("o.*").ToList(); Console.WriteLine("#### No Entity End ####"); } private static void JoinTable() { Console.WriteLine(""); Console.WriteLine("#### Join Table Start ####"); var db = GetInstance(); //Simple join var list = db.Queryable((o, i, c) => o.Id == i.OrderId&&c.Id == o.CustomId) .Select() .ToList(); //Join table var list2 = db.Queryable((o, i, c) => new JoinQueryInfos( JoinType.Left, o.Id == i.OrderId, JoinType.Left, c.Id == o.CustomId )) .Select().ToList(); //Join queryable var query1 = db.Queryable((o, i) => new object[] { JoinType.Left, o.Id == i.OrderId, }) .Where(o => o.Name == "jack"); var query2 = db.Queryable(); var list3=db.Queryable(query1, query2,JoinType.Left, (p1, p2) => p1.CustomId == p2.Id).Select().ToList(); Console.WriteLine("#### Join Table End ####"); } private static void QueryConditions() { Console.WriteLine(""); Console.WriteLine("#### Query Conditions Start ####"); SqlSugarClient db = GetInstance(); /*** By expression***/ //id=@id var list = db.Queryable().Where(it => it.Id == 1).ToList(); //id=@id or name like '%'+@name+'%' var list2 = db.Queryable().Where(it => it.Id == 1 || it.Name.Contains("jack")).ToList(); //Create expression var exp = Expressionable.Create() .And(it => it.Id == 1) .Or(it => it.Name.Contains("jack")).ToExpression(); var list3 = db.Queryable().Where(exp).ToList(); /*** By sql***/ //id=@id var list4 = db.Queryable().Where("id=@id", new { id = 1 }).ToList(); //id=@id or name like '%'+@name+'%' var list5 = db.Queryable().Where("id=@id or name like '%'+@name+'%' ", new { id = 1, name = "jack" }).ToList(); /*** By dynamic***/ //id=1 var conModels = new List(); conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1 var student = db.Queryable().Where(conModels).ToList(); //Complex use case List Order = new List(); conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" });//id=1 conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Like, FieldValue = "1" });// id like '%1%' conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNullOrEmpty }); conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.In, FieldValue = "1,2,3" }); conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NotIn, FieldValue = "1,2,3" }); conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1,2,3" }); conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNot, FieldValue = null });// id is not null conModels.Add(new ConditionalCollections() { ConditionalList = new List>()// (id=1 or id=2 and id=1) { //new KeyValuePair( WhereType.And ,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" }), new KeyValuePair (WhereType.Or,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }), new KeyValuePair ( WhereType.And,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }) } }); var list6 = db.Queryable().Where(conModels).ToList(); /*** Conditional builder ***/ // use whereif string name = ""; int id = 1; var query = db.Queryable() .WhereIF(!string.IsNullOrEmpty(name), it => it.Name.Contains(name)) .WhereIF(id > 0, it => it.Id == id).ToList(); //clone new Queryable var query2 = db.Queryable().Where(it => it.Id == 1); var list7 = query2.Clone().Where(it => it.Name == "jack").ToList();//id=1 and name = jack var list8 = query2.Clone().Where(it => it.Name == "tom").ToList();//id=1 and name = tom Console.WriteLine("#### Condition Screening End ####"); } private static void Async() { Console.WriteLine(""); Console.WriteLine("#### Async Start ####"); SqlSugarClient db = GetInstance(); var task1 = db.Queryable().FirstAsync(); var task2 = db.Queryable().Where(it => it.Id == 1).ToListAsync(); task1.Wait(); task2.Wait(); Console.WriteLine("#### Async End ####"); } private static SqlSugarClient GetInstance() { return new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true, AopEvents = new AopEvents { OnLogExecuting = (sql, p) => { Console.WriteLine(sql); Console.WriteLine(string.Join(",", p?.Select(it => it.ParameterName + ":" + it.Value))); } } }); } } }