| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- using System;
 - using System.Linq.Expressions;
 - using Luticate2.Auth.Business.Fields;
 - using Luticate2.Auth.Dbo;
 - using Luticate2.Auth.Dbo.Fields;
 - using Luticate2.Auth.Dbo.Result;
 - using Luticate2.Auth.Interfaces;
 - using Microsoft.Extensions.DependencyInjection;
 - 
 - namespace Luticate2.Auth.Business.FieldsExpressions
 - {
 -     public class LuFieldsExpressions<TDbo, TModel> : ILuFieldsExpressions<TDbo, TModel>
 -     {
 -         protected IServiceProvider ServiceProvider { get; }
 - 
 -         public LuFieldsExpressions(IServiceProvider serviceProvider)
 -         {
 -             ServiceProvider = serviceProvider;
 -         }
 -         
 -         public ILuFieldsExpressions<TDbo2, TModel2> GetService<TDbo2, TModel2>()
 -         {
 -             var service = ServiceProvider.GetService<ILuFieldsExpressions<TDbo2, TModel2>>();
 -             return service;
 -         }
 - 
 -         protected LuResult<Expression<Func<TType1, object>>> GetSubField<TType1, TType2, TType3>(
 -             Expression<Func<TType1, TModel>> modelProperty, LuFieldDbo field, Expression<Func<TModel, TType3>> modelSubProperty)
 -         {
 -             var subPropExprResult = LuExpressionUtils.GetSingleMemberFromExpression(modelSubProperty);
 -             if (subPropExprResult == null)
 -             {
 -                 return LuResult<Expression<Func<TType1, object>>>.Error(LuStatus.InternalError.ToInt(), "Bad field expression");
 -             }
 - 
 -             var prop = Expression.Property(modelProperty.Body, subPropExprResult.Name);
 -             var exp = Expression.Lambda<Func<TType1, TType3>>(prop, modelProperty.Parameters[0]);
 -             var service = GetService<TType2, TType3>();
 -             var finalExpResult = service.GetExpression(exp, field.Popped());
 -             return finalExpResult;
 -         }
 - 
 -         protected virtual LuResult<Expression<Func<TType1, object>>> GetExpressionInternal<TType1>(
 -             Expression<Func<TType1, TModel>> modelProperty, LuFieldDbo field)
 -         {
 -             return LuResult<Expression<Func<TType1, object>>>.Error(LuStatus.InputError.ToInt(), $"Unknown field: {field}", "");
 -         }
 - 
 -         public virtual LuResult<Expression<Func<TType1, object>>> GetExpression<TType1>(Expression<Func<TType1, TModel>> modelProperty, LuFieldDbo field)
 -         {
 -             if (field.IsRoot())
 -             {
 -                 var converted = Expression.Convert(modelProperty.Body, typeof(object));
 -                 var exp = Expression.Lambda<Func<TType1, object>>(converted, modelProperty.Parameters[0]);
 -                 return LuResult<Expression<Func<TType1, object>>>.Ok(exp);
 -             }
 -             return GetExpressionInternal(modelProperty, field);
 -         }
 -     }
 - }
 
 
  |