Я пишу обобщенную Entity для Dto Mapper, и у меня есть проблема. Я хочу описать Mapping программно.C# Выражение, частично разрешающее. Curring?
public void ById(Expression<Func<TDto, object>> propertySelector, Expression<Func<TEntity, TDto, bool>> expression) {
// Just the Setter what will be mapped
}
Так что в моем я вызываю функцию ById и передаю требуемое выражение. В этом случае это сопоставление описывает, как получить список объектов, где Entity.UserId равен Dto.Id.
ById((x, y) => x.UserId.Equals(y.Id));
Сам backendervice также является общим и генерируется типом «TDto». Служба backends уже содержит функцию «Где», которая активирует функцию.
public List<TEntity> Where<TEntity>(Func<TEntity, bool> predicate) {
ObjectSet<TEntity> Column = _getGenericColumnByType();
return Column.Where(predicate).ToList();
}
Как обычно, я бы назвал свой бэкэнд следующим образом.
GenericBackendService<TEntity> Service = // generateMyService;
Guid searchId = // my Guid im searching for
var result = Service.Where(x => x.Id.Equals(searchId));
И теперь наступает мой вопрос. Есть ли способ разрешить вторую часть моего выражения (x, y) => x.UserId.Equals (y.Id) и создать объект func, подобный этому x => x.UserId.Equals ("123 -456-678 ")?
public Func<TEntity, bool> MagicFunction(Expression<Func<TEntity, TDto, bool>> expression) {
//
// in -> (x, y) => x.UserId.Equals(y.Id)
//
// Do the magic
//
// out -> x => x.UserId.Equals("The Id I resolved from y.Id")
//
return function;
}
Хорошо, я вижу. Тогда мне нужно переоценить мои концепции. –