У меня есть класс репозитория, который позволяет для запросов с использованием лямбда-выражения (упрощенный частичный код):Изменение выражения предиката для класса оберточной
public class SomeRepository<T>: IRepository<T>
{
public IList<T> Find(Expression<Func<T, bool>> filter)
{
return SomeQueryProvider.Where(filter).ToList();
}
}
Однако для конкретного поставщика У меня есть необходимость, чтобы обернуть исходный объект в другом классе:
public class Wrapped<T>
{
public T OriginalObject { get; set; }
}
Таким образом, в данном случае, мне также нужно обернуть выражение входящий предиката в другое выражение:
public class AnotherRepository<T>: IRepository<T>
{
public IList<T> Find(Expression<Func<T, bool>> filter)
{
Expression<Func<Wrapped<T>, bool>> wrappedFilter = ...
return AnotherQueryProvider.Where(wrappedFilter).ToList();
}
}
Например, x => x.ParentId == 123
должно стать x => x.OriginalObject.ParentId == 123
.
Я не могу найти примеры для этого сценария, и мне с этим трудно справиться. Как я могу добавить предикатное выражение с свойством OriginalObject
?
насчет выбора 'OriginalObject', а затем используйте 'filter', как есть:' AnotherQueryProvider.Select (x => x.OriginalObjext) .Where (filter) .ToList(); ' –
На самом деле есть много примеров, если вы ищете [составление выражений] (http: //stackoverflow.com/search?q=c ompose +), но, как заметил другой комментатор, вы можете просто обменять 'Where' и' Select' (ваш образец должен иметь 'Select' для компиляции). –
@OfirWinegarten спасибо, по какой-то причине я не думал о самом простом решении. – Carvellis