Подтвердить что ты не робот

EF ICollection Vs List Vs IEnumerable Vs IQueryable

поэтому моя модель EF имеет отношения и в соответствии с тем, что я видел в примерах, эти отношения должны выполняться с виртуальными свойствами ICollection.

Пример:

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

Я где-то читал, что должен использовать IEnumerable для предотвращения отложенного выполнения, это правильно? Это означает, что если мои методы DAL возвращают IEnumerable, все еще IQueryable, SQL будет выполнен в тот момент, а не в тот момент, когда я вызываю .TOList на веб-странице.

Итак, что такое лучшая практика? Что я должен вернуть? IEnumerable, List?, IList, ICollection?

ТНХ

4b9b3361

Ответ 1

IQueryable:

  • Запрос не выполняется, пока вы действительно не перейдете к элементам, возможно, выполнив .ToList() или foreach. Это означает, что вы по-прежнему можете добавлять фильтры, например, Where().
  • Расширяет IEnumerable

IEnumerable:

  • Перечень только для пересылки. Вы не можете попасть в "пункт 4" без прохождения пунктов 0-3.
  • Список только для чтения, вы не можете добавить к нему или удалить его.
  • Все еще может использовать отложенное выполнение (IQueryable по-прежнему является IEnumerable).

IList:

  • Случайный доступ к полному списку
  • Возможно, полностью в памяти (нет отложенного выполнения, но кто знает, что именно этот класс выполняет это?)
  • Поддержка добавления и удаления
  • Расширяет IEnumerable и ICollection

ICollection:

  • Между IEnumerable и IList.
  • Расширяет IEnumerable

Что является "лучшим", зависит от ваших требований. Обычно IEnumerable "достаточно хорош", если вы хотите отображать только элементы. По крайней мере, всегда используйте общий вариант.