2013-06-15 2 views
1

Если я не»так, что я могу получить данные из базы данных, чтобы способами:У этого есть преимущества IQueryable?

  1. сначала с IEnumerable:

    myContext.MyTable.ToList();

  2. С IQeryable:

    IQueryable<MyTable> query = myContext.Mytable;

Я знаю, что одним из преимуществ является то, что IQueryable выполняет условия на сервере, поэтому более эффективно и быстрее, чем IEnumerable.

Но в моем хранилище, как я вернуть список, я хотел бы знать, если это:

return query.ToList(); 

имеет преимущества IQueryable.

ответ

3

query.ToList() такое же, как myContext.MyTable.ToList(). Он возвращает коллекцию в памяти (всю таблицу базы данных) и представляет собой только IEnumerable<T>, а не IQueryable<T>. Каждый последующий оператор LINQ - например, пункт Where - вы добавляете, будет выполняться в памяти, а не в базе данных.

Если вы решили вернуть IEnumerable<T> или List<T> из хранилища вы должны разработать репозитории методы, так что вы можете применять фильтры, сортировку и т.д. внутри эти методы - например, путем передачи фильтра и сортировки выражений в качестве параметров в методы или путем создания множества специализированных методов для разных случаев использования - например, GetOrdersByCustomerId, GetOrdersByShippingDate и т. д. и т. д. Если вы делаете это за пределами методов репозитория и после этого, вы будете испытывать плохую производительность.

Смежные вопросы