Quindi in poche parole ho una classe astratta:
public abstract class Member  
{
public string PCode { get; set; }
public string Reference { get; set; }
public DateTime? ElectedDate { get; set; }
}
E questo è ereditato da 3 altre classi:
public class Fellow : Member
{
 // some class level properties here
}
public class ForeignMember : Member
{
 // some class level properties here
}
public class HonoraryMember : Member
{
 // some class level properties here
}
E le normali operazioni CRUD vengono eseguite utilizzando un modello di repository generico:
Interfaccia
public interface ICRMRepository<T>
{
    List<T> GetAll();
    T GetById(int id);
    T GetByPCode(string pcode);
}
Class
public class CRMRepository<T> : ICRMRepository<T> where T : class
{
   public List<T> GetAll()
   {
    //actions go here
   }
   public T GetById(int id)
   {
    //actions go here        
   }
   public T GetByPCode(string pcode)
   {
    //actions go here
   }
}
La domanda è se volessi fare una query che riportasse tutti i Fellows, HonoraryMembers e ForeignMembers in un set di risultati, come potrei fare questo?
Sarebbe meglio avere un'interfaccia invece dell'eredità, ad es. Imember, e quindi le tre classi usano quell'interfaccia? O qualche soluzione che usa entrambi?