diff --git a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom03.cs b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom03.cs index f46bf7623..458daf27a 100644 --- a/Src/Asp.Net/SqlServerTest/UnitTest/UCustom03.cs +++ b/Src/Asp.Net/SqlServerTest/UnitTest/UCustom03.cs @@ -10,6 +10,9 @@ namespace OrmTest { public static void Init() { + Demo4(); + Demo3(); + Demo2(); Demo1(); } @@ -37,9 +40,15 @@ namespace OrmTest } }); var json = db.Context.Utilities.SerializeObject(conModels); - var list6 =db .Queryable().Where(conModels).ToList(); + var conditionalModels = db.Context.Utilities.JsonToConditionalModels(json); + var list6 = db.Queryable().Where(conditionalModels).ToList(); + var json2 = db.Context.Utilities.SerializeObject(conditionalModels); + if (json != json2) + { + throw new Exception("unit error"); + } + - Demo2(); } private static void Demo2() @@ -62,12 +71,17 @@ namespace OrmTest }) } }); - conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1" }); - conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNot, FieldValue = null });// id is not null + var json = db.Context.Utilities.SerializeObject(conModels); - var list6 = db.Queryable().Where(conModels).ToList(); + var conditionalModels = db.Context.Utilities.JsonToConditionalModels(json); + var list6 = db.Queryable().Where(conditionalModels).ToList(); + var json2 = db.Context.Utilities.SerializeObject(conditionalModels); + if (json != json2) + { + throw new Exception("unit error"); + } + - Demo3(); } @@ -80,24 +94,68 @@ namespace OrmTest 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.Null,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }), new KeyValuePair ( WhereType.And, new ConditionalTree(){ ConditionalList=new List>(){ - new KeyValuePair(WhereType.Or,new ConditionalModel(){ + new KeyValuePair(WhereType.Null,new ConditionalModel(){ FieldName="ID", ConditionalType=ConditionalType.Equal, FieldValue="1" }), - new KeyValuePair(WhereType.And,new ConditionalModel(){ + new KeyValuePair(WhereType.Or,new ConditionalModel(){ FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" }) } }) } - }); - conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.NoEqual, FieldValue = "1" }); - conModels.Add(new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.IsNot, FieldValue = null });// id is not null + }); var json = db.Context.Utilities.SerializeObject(conModels); - var list6 = db.Queryable().Where(conModels).ToList(); + var conditionalModels = db.Context.Utilities.JsonToConditionalModels(json); + var list6 = db.Queryable().Where(conditionalModels).ToList(); + var json2 = db.Context.Utilities.SerializeObject(conditionalModels); + if (json != json2) + { + throw new Exception("unit error"); + } + + } + + private static void Demo4() + { + var db = NewUnitTest.Db; + List conModels = new List(); + conModels.Add(new ConditionalTree() + { + 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.Null,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }), + new KeyValuePair (WhereType.And,new ConditionalModel() { FieldName = "name", ConditionalType = ConditionalType.Equal, FieldValue = "2" }), + new KeyValuePair ( + WhereType.And, new ConditionalTree(){ + ConditionalList=new List>() + { + new KeyValuePair(WhereType.Null,new ConditionalModel(){ + FieldName="price", ConditionalType=ConditionalType.Equal, FieldValue="1" + }), + new KeyValuePair(WhereType.And,new ConditionalModel(){ + FieldName = "CustomId", ConditionalType = ConditionalType.Equal, FieldValue = "1" + }) + + } + }) + } + }); + var json = db.Context.Utilities.SerializeObject(conModels); + + var conditionalModels = db.Context.Utilities.JsonToConditionalModels(json); + var list6 = db.Queryable().Where(conditionalModels).ToList(); + + var json2 = db.Context.Utilities.SerializeObject(conditionalModels); + + if (json != json2) + { + throw new Exception("unit error"); + } } } } diff --git a/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs b/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs index 33daaa62f..d4442f5a0 100644 --- a/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs +++ b/Src/Asp.Net/SqlSugar/Infrastructure/ContextMethods.cs @@ -707,11 +707,24 @@ namespace SqlSugar if (item.Count() > 0) { - IConditionalModel model = new ConditionalTree() + if (item.ToString().Contains("ConditionalList")) { - ConditionalList = GetConditionalList(item) - }; - conditionalModels.Add(model); + IConditionalModel model = new ConditionalTree() + { + ConditionalList = GetConditionalList(item) + }; + conditionalModels.Add(model); + } + else + { + IConditionalModel conditionalModel = new ConditionalModel() + { + ConditionalType = (ConditionalType)Convert.ToInt32(item["ConditionalType"]), + FieldName = item["FieldName"] + "", + FieldValue = item["FieldValue"].Value()==null?null: item["FieldValue"].ToString() + }; + conditionalModels.Add(conditionalModel); + } } } return conditionalModels; @@ -738,7 +751,7 @@ namespace SqlSugar { ConditionalType = (ConditionalType)Convert.ToInt32(value["ConditionalType"]), FieldName = value["FieldName"] + "", - FieldValue = value["FieldValue"] + "" + FieldValue = value["FieldValue"].Value() == null ? null : value["FieldValue"].ToString() }; } result.Add(new KeyValuePair(type, conditionalModel));