Как обновить значение выражения для универсального типа - PullRequest
1 голос
/ 08 июня 2019

Я передаю выражение

InsertAsync(caseCommentDto, e => e.CaseNumber == caseCommentDto.CaseNumber && e.CommentSequenceNumber == caseCommentDto.CommentSequenceNumber)

к моему методу шлюза

public async Task<BaseResult> InsertAsync(TEntity entity, Expression<Func<TEntity, bool>> expression)
    {
        //Get SequenceID for example CaseNumber

        var sequenceIdField = typeof(SequenceIds).GetField(typeof(TEntity).Name).GetValue(null);
        var sequenceField = typeof(Sequences).GetField(typeof(TEntity).Name).GetValue(null);
        var entityType = typeof(TEntity).Name;
        var sequenceIdValue = typeof(TEntity).GetProperty(sequenceIdField.ToString())?.GetValue(entity);
        var sequenceNumber = _amhUnitOfWork.GetNextSequenceAsync(sequenceIdValue.ToString()).Result.Payload;
        typeof(TEntity).GetProperty(sequenceField.ToString())?.SetValue(entity, sequenceNumber);

        //var parma = expression.(sequenceNumber.ToString()).
        //expression = { expression=>}
        //someList.Select(x => { x.SomeProp = "foo"; return x; })
        //expression.Update();SetProperty();e
        //expression.Parameters.
        //SetProperty(expression,sequenceField.ToString(), sequenceIdValue);
        typeof(Expression<Func<TEntity, bool>>).GetField(sequenceField.ToString())?.SetValue(expression, sequenceNumber);

        return await _amhUnitOfWork.InsertAsync(entity, expression).ConfigureAwait(false);
    }

здесь все определяется динамически. мне удалось установить значение сущности с кодом.

typeof(TEntity).GetProperty(sequenceField.ToString())?.SetValue(entity, sequenceNumber);

как мне сделать то же самое для предиката .

Кажется, это работает, но не уверен, я не могу проверить. Как проверить, работает ли это.

typeof(Expression<Func<TEntity, bool>>).GetField(sequenceField.ToString())?.SetValue(expression, sequenceNumber);

Изменить: Подтверждение того, что выше не работает.

...