mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-07 18:04:55 +08:00
Update SetContext
This commit is contained in:
@@ -16,6 +16,17 @@ namespace OrmTest
|
||||
.MappingField(z=>z.studenId,()=>it.StudentId)
|
||||
.MappingField(z => z.BookId, () => it.StudentId).ToList())
|
||||
.ToList();
|
||||
|
||||
var list2 = db.Queryable<StudentA>().ToList();
|
||||
db.ThenMapper(list2, it =>
|
||||
{
|
||||
it.Books = db.Queryable<BookA>().Where(z=>z.BookId==1).SetContext(
|
||||
z => z.studenId, () => it.StudentId,
|
||||
z => z.BookId, () => it.StudentId,
|
||||
it);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class StudentA
|
||||
|
||||
@@ -1386,7 +1386,7 @@ namespace SqlSugar
|
||||
{
|
||||
pkName = ((mappingFiled as LambdaExpression).Body as MemberExpression).Member.Name;
|
||||
}
|
||||
var key = thisFiled.ToString() +typeof(ParameterT).FullName + typeof(T).FullName;
|
||||
var key = thisFiled.ToString()+mappingFiled.ToString() +typeof(ParameterT).FullName + typeof(T).FullName;
|
||||
var ids = list.Where(it=>it!=null).Select(it => it.GetType().GetProperty(pkName).GetValue(it)).Distinct().ToArray();
|
||||
if (queryableContext.TempChildLists == null)
|
||||
queryableContext.TempChildLists = new Dictionary<string, object>();
|
||||
@@ -1417,7 +1417,54 @@ namespace SqlSugar
|
||||
result = result.Where(it => it.GetType().GetProperty(name).GetValue(it).ObjToString() == pkValue.ObjToString()).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<T> SetContext<ParameterT>(Expression<Func<T, object>> thisFiled1, Expression<Func<object>> mappingFiled1,
|
||||
Expression<Func<T, object>> thisFiled2, Expression<Func<object>> mappingFiled2,
|
||||
ParameterT parameter)
|
||||
{
|
||||
if (parameter == null)
|
||||
{
|
||||
return new List<T>();
|
||||
}
|
||||
var rightEntity = this.Context.EntityMaintenance.GetEntityInfo<ParameterT>();
|
||||
var leftEntity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
List<T> result = new List<T>();
|
||||
var queryableContext = this.Context.TempItems["Queryable_To_Context"] as MapperContext<ParameterT>;
|
||||
var list = queryableContext.list;
|
||||
var key = thisFiled1.ToString() + mappingFiled1.ToString()+
|
||||
thisFiled2.ToString() + mappingFiled2.ToString()+
|
||||
typeof(ParameterT).FullName + typeof(T).FullName;
|
||||
MappingFieldsHelper<ParameterT> fieldsHelper = new MappingFieldsHelper<ParameterT>();
|
||||
var mappings = new List<MappingFieldsExpression>() {
|
||||
new MappingFieldsExpression(){
|
||||
LeftColumnExpression=thisFiled1,
|
||||
LeftEntityColumn=leftEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(thisFiled1)),
|
||||
RightColumnExpression=mappingFiled1,
|
||||
RightEntityColumn=rightEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(mappingFiled1))
|
||||
},
|
||||
new MappingFieldsExpression(){
|
||||
LeftColumnExpression=thisFiled2,
|
||||
LeftEntityColumn=leftEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(thisFiled2)),
|
||||
RightColumnExpression=mappingFiled2,
|
||||
RightEntityColumn=rightEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(mappingFiled2))
|
||||
}
|
||||
};
|
||||
var conditionals=fieldsHelper.GetMppingSql(list, mappings);
|
||||
if (queryableContext.TempChildLists == null)
|
||||
queryableContext.TempChildLists = new Dictionary<string, object>();
|
||||
if (list != null && queryableContext.TempChildLists.ContainsKey(key))
|
||||
{
|
||||
result = (List<T>)queryableContext.TempChildLists[key];
|
||||
}
|
||||
else
|
||||
{
|
||||
result = this.Clone().Where(conditionals,true).ToList();
|
||||
queryableContext.TempChildLists[key] = result;
|
||||
}
|
||||
List<object> listObj = result.Select(it => (object)it).ToList();
|
||||
object obj = (object)parameter;
|
||||
var newResult = fieldsHelper.GetSetList(obj, listObj, mappings).Select(it=>(T)it ).ToList();
|
||||
return newResult;
|
||||
}
|
||||
public async Task<List<T>> SetContextAsync<ParameterT>(Expression<Func<T, object>> thisFiled, Expression<Func<object>> mappingFiled, ParameterT parameter)
|
||||
{
|
||||
List<T> result = new List<T>();
|
||||
@@ -1433,7 +1480,7 @@ namespace SqlSugar
|
||||
{
|
||||
pkName = ((mappingFiled as LambdaExpression).Body as MemberExpression).Member.Name;
|
||||
}
|
||||
var key = thisFiled.ToString() + typeof(ParameterT).FullName + typeof(T).FullName;
|
||||
var key = thisFiled.ToString()+ mappingFiled.ToString() + typeof(ParameterT).FullName + typeof(T).FullName;
|
||||
var ids = list.Select(it => it.GetType().GetProperty(pkName).GetValue(it)).ToArray();
|
||||
if (queryableContext.TempChildLists == null)
|
||||
queryableContext.TempChildLists = new Dictionary<string, object>();
|
||||
@@ -1464,6 +1511,54 @@ namespace SqlSugar
|
||||
result = result.Where(it => it.GetType().GetProperty(name).GetValue(it).ObjToString() == pkValue.ObjToString()).ToList();
|
||||
return result;
|
||||
}
|
||||
public async Task<List<T>> SetContextAsync<ParameterT>(Expression<Func<T, object>> thisFiled1, Expression<Func<object>> mappingFiled1,
|
||||
Expression<Func<T, object>> thisFiled2, Expression<Func<object>> mappingFiled2,
|
||||
ParameterT parameter)
|
||||
{
|
||||
if (parameter == null)
|
||||
{
|
||||
return new List<T>();
|
||||
}
|
||||
var rightEntity = this.Context.EntityMaintenance.GetEntityInfo<ParameterT>();
|
||||
var leftEntity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
List<T> result = new List<T>();
|
||||
var queryableContext = this.Context.TempItems["Queryable_To_Context"] as MapperContext<ParameterT>;
|
||||
var list = queryableContext.list;
|
||||
var key = thisFiled1.ToString() + mappingFiled1.ToString() +
|
||||
thisFiled2.ToString() + mappingFiled2.ToString() +
|
||||
typeof(ParameterT).FullName + typeof(T).FullName;
|
||||
MappingFieldsHelper<ParameterT> fieldsHelper = new MappingFieldsHelper<ParameterT>();
|
||||
var mappings = new List<MappingFieldsExpression>() {
|
||||
new MappingFieldsExpression(){
|
||||
LeftColumnExpression=thisFiled1,
|
||||
LeftEntityColumn=leftEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(thisFiled1)),
|
||||
RightColumnExpression=mappingFiled1,
|
||||
RightEntityColumn=rightEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(mappingFiled1))
|
||||
},
|
||||
new MappingFieldsExpression(){
|
||||
LeftColumnExpression=thisFiled2,
|
||||
LeftEntityColumn=leftEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(thisFiled2)),
|
||||
RightColumnExpression=mappingFiled2,
|
||||
RightEntityColumn=rightEntity.Columns.First(it=>it.PropertyName==ExpressionTool.GetMemberName(mappingFiled2))
|
||||
}
|
||||
};
|
||||
var conditionals = fieldsHelper.GetMppingSql(list, mappings);
|
||||
if (queryableContext.TempChildLists == null)
|
||||
queryableContext.TempChildLists = new Dictionary<string, object>();
|
||||
if (list != null && queryableContext.TempChildLists.ContainsKey(key))
|
||||
{
|
||||
result = (List<T>)queryableContext.TempChildLists[key];
|
||||
}
|
||||
else
|
||||
{
|
||||
result =await this.Clone().Where(conditionals, true).ToListAsync();
|
||||
queryableContext.TempChildLists[key] = result;
|
||||
}
|
||||
List<object> listObj = result.Select(it => (object)it).ToList();
|
||||
object obj = (object)parameter;
|
||||
var newResult = fieldsHelper.GetSetList(obj, listObj, mappings).Select(it => (T)it).ToList();
|
||||
return newResult;
|
||||
}
|
||||
public virtual void ForEach(Action<T> action, int singleMaxReads = 300,System.Threading.CancellationTokenSource cancellationTokenSource = null)
|
||||
{
|
||||
Check.Exception(this.QueryBuilder.Skip > 0 || this.QueryBuilder.Take > 0, ErrorMessage.GetThrowMessage("no support Skip take, use PageForEach", "不支持Skip Take,请使用 Queryale.PageForEach"));
|
||||
|
||||
@@ -136,7 +136,9 @@ namespace SqlSugar
|
||||
List<TResult> ToList<TResult>(Expression<Func<T, TResult>> expression);
|
||||
List<T> ToList();
|
||||
List<T> SetContext<ParameterT>(Expression<Func<T,object>> thisFiled, Expression<Func<object>> mappingFiled, ParameterT parameter);
|
||||
List<T> SetContext<ParameterT>(Expression<Func<T, object>> thisFiled1, Expression<Func<object>> mappingFiled1, Expression<Func<T, object>> thisFiled2, Expression<Func<object>> mappingFiled2, ParameterT parameter);
|
||||
Task <List<T>> SetContextAsync<ParameterT>(Expression<Func<T, object>> thisFiled, Expression<Func<object>> mappingFiled, ParameterT parameter);
|
||||
Task<List<T>> SetContextAsync<ParameterT>(Expression<Func<T, object>> thisFiled1, Expression<Func<object>> mappingFiled1, Expression<Func<T, object>> thisFiled2, Expression<Func<object>> mappingFiled2, ParameterT parameter);
|
||||
Dictionary<string, object> ToDictionary(Expression<Func<T, object>> key, Expression<Func<T, object>> value);
|
||||
Task<Dictionary<string, object>> ToDictionaryAsync(Expression<Func<T, object>> key, Expression<Func<T, object>> value);
|
||||
List<Dictionary<string, object>> ToDictionaryList();
|
||||
|
||||
Reference in New Issue
Block a user