繁体   English   中英

如何传递表达式<Func<T, bool> &gt; 谓词作为方法的参数?

[英]How to pass Expression<Func<T, bool>> predicate as a parameter to a method?

我有一个处理事务的高阶函数:

public static void ExecuteTransaction<Context, FunctionParameter>(Action<FunctionParameter> functionToBeExecuted,
                                                                           FunctionParameter parameter,
                                                                           Context context)
                                                                           where Context : DbContext
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    functionToBeExecuted(parameter);
                    context.SaveChanges();

                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }

如何更改 ExecuteTransaction 方法以接受此方法及其参数?:

public void DeleteBy(Expression<Func<TEntity, bool>> predicate)
{
    var results = DbSet.Where(predicate).ToList();
    DbSet.RemoveRange(results);
}

如果我理解正确,您正在尝试将DeleteBy传递给ExecuteTransaction ,并让ExecuteTransaction运行该方法。

假设你有一个Expression<Func<TEntity, bool>>作为已经准备好的DeleteBy的参数:

Expression<Func<TEntity, bool>> param = entity => /*some lambda that returns a bool */;

您可以直接传递DeleteBy ,而无需对ExecuteTransaction进行任何更改,因为DeleteBy匹配Action<T>的签名:

ExecuteTransaction(DeleteBy, param, context);

编译器会自动推断FunctionParameterExpression<Func<TEntity, bool>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM