Вызов универсального метода с параметром лямбда-выражений (и тип, известный только во время выполнения) - PullRequest
0 голосов
/ 24 октября 2018

У меня есть репозиторий:

public interface IRepository<TEntity> : ICommandRepository<TEntity>, IBaseRepository, IDisposable, IQueryableRepository<TEntity>
{
}
public interface ICommandRepository<TEntity> : IBaseRepository, IDisposable
{
    void Delete(Expression<Func<TEntity, bool>> predicate);     
}

Моя цель - вызвать метод Delete с помощью параметров выражения Lamda, если я знаю тип "TEntity" во время выполнения.Пример, как я вызываю этот метод:

public JsonResult DeleteRows(int[] ids)
{
    var repo = DependencyResolver.Current.GetService<IRepository<WORKINGHOURS>>();
    repo.Delete(e => ids.Contains(e.Id));
    repo.UnitOfWork.Commit();
}

Теперь я хочу вызвать тот же метод, используя отражение и тип во время выполнения:

public JsonResult DeleteRows(string type, int[] ids)
{
    Type dbObjectType = Type.GetType(type);
    Type repositoryType = typeof (IRepository<>).MakeGenericType(dbObjectType);
    var repositoryInstance = ServiceLocator.CurrentLifetimeScope.Resolve(repositoryType);

    MethodInfo deleteMethod = repositoryType.GetMethod("Delete");
    // TODO:
    // Expression<Func<WORKINGHOURS, bool>> searchQuery = p => ids.Contains(p.Id);
    var delete = deleteMethod.Invoke(repositoryInstance, .....);
    // Commit
}

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...