Я передаю выражение
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);
Изменить: Подтверждение того, что выше не работает.