using System; using System.Collections.Generic; using System.Linq.Expressions; using Luticate2.Utils.Dbo; using Luticate2.Utils.Dbo.Result; using Microsoft.EntityFrameworkCore; namespace Luticate2.Utils.DataAccess { public abstract class LuEfDataAccess : LuDataAccess where TModel : class where TDbContext : DbContext { protected readonly TDbContext Db; protected readonly DbSet Table; protected LuEfDataAccess(TDbContext db, DbSet table) { Db = db; Table = table; } public LuResult Execute(Func> func) { try { return func(); } catch (Exception e) { return LuResult.Error(LuStatus.DbError, e); } } public static Expression> GetExpression(params KeyValuePair[] keys) { var param = Expression.Parameter(typeof(TModel), "x"); Expression totalExp = null; foreach (var pair in keys) { var equalExp = Expression.Equal(Expression.Property(param, pair.Key), Expression.Constant(pair.Value)); totalExp = totalExp == null ? equalExp : Expression.And(equalExp, totalExp); } return Expression.Lambda>(totalExp, param); } } }