EF ICollection Vs Lista Vs IEnumerable Vs IQueryable

Então, meu modelo EF tem relacionamentos e, de acordo com o que eu vi nos exemplos, esses relacionamentos devem ser feitos com propriedades virtuais de ICollection.

Exemplo:

 public class Task
    {
        public int Id { get; set; }
        public string Description { get; set; }
        public virtual ICollection<SubTask>  { get; set; }
    }

Eu li em algum lugar que eu deveria usar IEnumerable para evitar a execução adiada, isso é correto? Isso significa que se meus métodos DAL retornarem IEnumerable, ainda de IQueryable, o SQL será executado naquele momento, e não no momento em que eu chamar .TOList na página web.

Então, qual é a melhor prática? O que devo devolver? IEnumerable, List ?, IList, ICollection?

THX

questionAnswers(2)

yourAnswerToTheQuestion