You can add a new ActiveCustomers property that returns this:
public IQueryable<Customer> ActiveCustomers { get { return db.Customers.Where(e => e.Deleted == null); } }
Any queries to this property may indicate additional Where conditions and otherwise modify the results, but they will always start with clients that have not been deleted. And due to the delayed execution of LINQ, this statement does not raise any additional queries.
If you need to make sure that no one can access db.Customers , you can try to hide it by doing something like this (it may not work, I will need to see your implementation):
public new IQueryable<Customer> Customers { get { throw new InvalidOperationException("Use property ActiveCustomers instead."); } }
Yuck source share