Учитывая определение абстрактного класса, вам нужно будет включить ключ, являющийся частью общих аргументов, чтобы иметь возможность использовать его.
Простой пример передачи заказа по функции.
public abstract class MyClass<T, TKey> where T : class {
public virtual List<T> GetAll(
Expression<Func<T, bool>> exp,
Func<T, TKey> keySelector = null
) {
var query = repository.Get(exp);
if(orderBy != null) {
return query.OrderBy(keySelector).ToList();
return query.ToList();
}
}
После этого вы можете получить производную версию класса с типом ключа по умолчанию
Например, следующее использует string
, но это может быть просто int
, Guid
и т. Д.
public abstract class MyClass<T> : MyClass<T, string> where T : class {
}
Но суть в том, что вам нужно знать порядок по типу, чтобы иметь возможность его использовать.
...GetAll(_ => _.SomeProperty == someValue, o => o.Name);