Полный список возвращается сначала и затем фильтруется при использовании linq to sql для фильтрации данных из базы данных или только отфильтрованного списка? - PullRequest
3 голосов
/ 11 мая 2010

Это, наверное, очень простой вопрос, над которым я работаю в проекте MVC. Вот пример того, о чем я говорю.

У меня есть файл rdml, связанный с базой данных с таблицей «Пользователи», в которой содержится 500 000 строк. Но я только хочу найти пользователей, которые были введены 5/7/2010. Допустим, я делаю это в моем UserRepository:

от вас в db.GetUsers (), где u.CreatedDate = "5/7/2010" выберите u
(делать это по памяти, так что не убивайте меня, если мой синтаксис немного нарушен, это концепция, которую я ищу)

Этот оператор сначала возвращает все 500 000 строк, а затем фильтрует его или возвращает только отфильтрованный список?

Ответы [ 4 ]

3 голосов
/ 11 мая 2010

Фильтрует в базе данных с момента построения выражения на основе ITable, возвращая IQueryable<T> источник данных.

1 голос
/ 11 мая 2010

Когда запрос будет выполнен, он создаст SQL для возврата только отфильтрованного набора.

Следует помнить одну вещь: если вы ничего не делаете с результатами этого запроса, то вообще ничего не будет запрошено.

Запрос будет отложен до тех пор, пока вы не перечислите набор результатов.

Доброжелательность,

Dan

1 голос
/ 11 мая 2010

Linq to SQL переводит ваш запрос в SQL перед отправкой в ​​базу данных, поэтому возвращается только отфильтрованный список.

0 голосов
/ 11 мая 2010

Эти люди правы, и я бы порекомендовал отслеживать запросы, которые создает LinqToSql. LinqToSql - отличный инструмент, но он не идеален. Я заметил ряд небольших недостатков, отслеживая создаваемые запросы и немного подправляя их при необходимости.

DataContext имеет свойство «Журнал», с которым вы можете работать для просмотра созданных запросов. Я создал простой HttpModule, который выводит журнал DataContext (отформатированный для сладости) в мое окно вывода. Таким образом, я могу увидеть используемый им SQL-код и настроить его при необходимости. Он был на вес золота.

Дополнительное примечание - я не имею в виду отрицательное отношение к SQL, который создает LinqToSql, поскольку он очень хорош и эффективен почти каждый раз. Еще одним хорошим побочным эффектом мониторинга запросов является то, что вы можете показать друзьям, которые твердо стоят на ADO.NET - хранители Proc, насколько эффективен LinqToSql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...