То, что вам нужно передать Enumerable.Where
, это Predicate<T>
. Predicate<T>
- это делегат, который может принимать экземпляры T
и возвращать bool; вы можете думать о предикате как о представлении свойства, которое является либо true
, либо false
относительно значений T
.
Теперь есть большая проблема, заключающаяся в том, что если вы не наложите ограничение на T
, компилятор не сможет узнать, что T
имеет общедоступное свойство с именем IsActive
. Таким образом, вы должны определить интерфейс (или базовый класс), который A
и B
реализуют (или наследовать) от него, и сообщить методу GetAllActive
, что T
реализует (или наследует) этот интерфейс (или базовый класс). Вы можете сделать это, ограничив T
в определении DataAccessBase
. Таким образом:
interface IIsActive {
bool IsActive { get; set; }
}
class A : IIsActive {
public bool IsActive { get; set; }
}
class B : IIsActive {
public bool IsActive { get; set; }
}
public class DataAccessBase<T> where T : class, IIsActive {
public IList<T> GetAllActive() {
return dataContext.GetTable<T>()
.Where(x => x.IsActive)
.ToList();
}
}