using IRaCIS.Core.Domain.Models; using Microsoft.EntityFrameworkCore.Metadata; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace IRaCIS.Core.Infra.EFCore { public static class SoftDeleteQueryExtension { public static void AddSoftDeleteQueryFilter( this IMutableEntityType entityData) { var methodToCall = typeof(SoftDeleteQueryExtension) .GetMethod(nameof(GetSoftDeleteFilter), BindingFlags.NonPublic | BindingFlags.Static) .MakeGenericMethod(entityData.ClrType); var filter = methodToCall.Invoke(null, new object[] { }); entityData.SetQueryFilter((LambdaExpression)filter); } private static LambdaExpression GetSoftDeleteFilter() where TEntity : class, ISoftDelete { Expression> filter = x => !x.IsDeleted; return filter; } } }