Update where(tree)

This commit is contained in:
sunkaixuna 2021-12-25 21:34:55 +08:00
parent 8651e08dc9
commit 2c1c0033f5
2 changed files with 68 additions and 5 deletions

View File

@ -36,7 +36,68 @@ namespace OrmTest
}) })
} }
}); });
var json = db.Context.Utilities.SerializeObject(conModels);
var list6 =db .Queryable<Order>().Where(conModels).ToList(); var list6 =db .Queryable<Order>().Where(conModels).ToList();
Demo2();
}
private static void Demo2()
{
var db = NewUnitTest.Db;
List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalTree()
{
ConditionalList = new List<KeyValuePair<WhereType, IConditionalModel>>()// (id=1 or id=2 and id=1)
{
//new KeyValuePair<WhereType, ConditionalModel>( WhereType.And ,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" }),
new KeyValuePair<WhereType, IConditionalModel> (WhereType.Or,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }),
new KeyValuePair<WhereType, IConditionalModel> ( WhereType.And, new ConditionalTree(){
ConditionalList=new List<KeyValuePair<WhereType, IConditionalModel>>(){
new KeyValuePair<WhereType, IConditionalModel>(WhereType.And,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<Order>().Where(conModels).ToList();
Demo3();
}
private static void Demo3()
{
var db = NewUnitTest.Db;
List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(new ConditionalTree()
{
ConditionalList = new List<KeyValuePair<WhereType, IConditionalModel>>()// (id=1 or id=2 and id=1)
{
//new KeyValuePair<WhereType, ConditionalModel>( WhereType.And ,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "1" }),
new KeyValuePair<WhereType, IConditionalModel> (WhereType.Or,new ConditionalModel() { FieldName = "id", ConditionalType = ConditionalType.Equal, FieldValue = "2" }),
new KeyValuePair<WhereType, IConditionalModel> ( WhereType.And, new ConditionalTree(){
ConditionalList=new List<KeyValuePair<WhereType, IConditionalModel>>(){
new KeyValuePair<WhereType, IConditionalModel>(WhereType.Or,new ConditionalModel(){
FieldName="ID", ConditionalType=ConditionalType.Equal, FieldValue="1"
}),
new KeyValuePair<WhereType, IConditionalModel>(WhereType.And,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<Order>().Where(conModels).ToList();
} }
} }
} }

View File

@ -280,7 +280,7 @@ namespace SqlSugar
List<IConditionalModel> conModels = new List<IConditionalModel>(); List<IConditionalModel> conModels = new List<IConditionalModel>();
conModels.Add(con.Value); conModels.Add(con.Value);
var childSqlInfo = ConditionalModelToSql(conModels, 1000 * (1 + index) + models.IndexOf(item)); var childSqlInfo = ConditionalModelToSql(conModels, 1000 * (1 + index) + models.IndexOf(item));
if (!isFirst) if (!isFirst && con.Value.FieldName != $"[value=sql{UtilConstants.ReplaceKey}]")
{ {
builder.AppendFormat(" {0} ", con.Key.ToString().ToUpper()); builder.AppendFormat(" {0} ", con.Key.ToString().ToUpper());
@ -301,17 +301,17 @@ namespace SqlSugar
else else
{ {
var item = model as ConditionalTree; var item = model as ConditionalTree;
BuilderTree(builder,item,ref indexTree, parameters); BuilderTree(builder,item,ref indexTree, parameters, ref mainIndex);
} }
mainIndex++; mainIndex++;
} }
return new KeyValuePair<string, SugarParameter[]>(builder.ToString(), parameters.ToArray()); return new KeyValuePair<string, SugarParameter[]>(builder.ToString(), parameters.ToArray());
} }
private void BuilderTree(StringBuilder builder,ConditionalTree item,ref int indexTree, List<SugarParameter> parameters) private void BuilderTree(StringBuilder builder,ConditionalTree item,ref int indexTree, List<SugarParameter> parameters,ref int mainIndex)
{ {
var conditionals = ToConditionalCollections(item,ref indexTree, parameters); var conditionals = ToConditionalCollections(item,ref indexTree, parameters);
var sqlobj = ConditionalModelToSql(new List<IConditionalModel> { conditionals }, 1); var sqlobj = ConditionalModelToSql(new List<IConditionalModel> { conditionals }, mainIndex);
var sql = sqlobj.Key; var sql = sqlobj.Key;
RepairReplicationParameters(ref sql, sqlobj.Value,indexTree); RepairReplicationParameters(ref sql, sqlobj.Value,indexTree);
parameters.AddRange(sqlobj.Value); parameters.AddRange(sqlobj.Value);
@ -323,6 +323,7 @@ namespace SqlSugar
private ConditionalCollections ToConditionalCollections(ConditionalTree item,ref int indexTree, List<SugarParameter> parameters) private ConditionalCollections ToConditionalCollections(ConditionalTree item,ref int indexTree, List<SugarParameter> parameters)
{ {
List<KeyValuePair<WhereType, ConditionalModel>> list = new List<KeyValuePair<WhereType, ConditionalModel>>(); List<KeyValuePair<WhereType, ConditionalModel>> list = new List<KeyValuePair<WhereType, ConditionalModel>>();
var index = 0;
foreach (var it in item.ConditionalList) foreach (var it in item.ConditionalList)
{ {
ConditionalModel model = new ConditionalModel(); ConditionalModel model = new ConditionalModel();
@ -333,7 +334,7 @@ namespace SqlSugar
else else
{ {
var con = ToConditionalCollections(it.Value as ConditionalTree,ref indexTree, parameters); var con = ToConditionalCollections(it.Value as ConditionalTree,ref indexTree, parameters);
var sqlobj = ConditionalModelToSql(new List<IConditionalModel> { con },0); var sqlobj = ConditionalModelToSql(new List<IConditionalModel> { con }, index);
var sql = sqlobj.Key; var sql = sqlobj.Key;
RepairReplicationParameters(ref sql, sqlobj.Value, indexTree); RepairReplicationParameters(ref sql, sqlobj.Value, indexTree);
model = new ConditionalModel() model = new ConditionalModel()
@ -345,6 +346,7 @@ namespace SqlSugar
indexTree++; indexTree++;
} }
list.Add(new KeyValuePair<WhereType, ConditionalModel>(it.Key, model)); list.Add(new KeyValuePair<WhereType, ConditionalModel>(it.Key, model));
index++;
} }
var result= new ConditionalCollections() var result= new ConditionalCollections()
{ {