2010-06-24 13 views
0

У меня есть несколько методов в моем УСКЕ, извлекающих несколько записей из базы данных и передать его в пользовательском интерфейсе для привязки к данным управления, таким как Gridview или ...
я мог выбрать свой тип возврата данных методов IQueryable<t> или Ilist<t>.
Мой вопрос в том, какой из них будет лучше для меня и почему? На самом деле, я не знаю разницы между этими двумя типами, и я не знаю, какой из них лучше всего подходит для каких ситуаций?IQueryable <t> Или IList <t>

Спасибо

ответ

5

Разница заключается в том, что IList<T> представляет реальный список результатов. Он будет «материализован» - извлечен из базы данных в память. (В теории это просто интерфейс, конечно, - это может еще отложить все ...)

IQueryable<T> представляет запрос - вы все равно можете создавать дополнительные биты запроса после этого, например. Затем вы можете оценить запрос, запросив результаты. Это будет использовать отложенное выполнение, только запрашивая результаты, когда они действительно нужны.

Для чего вы должны вернуться ... если вы просто собираетесь напрямую связываться с пользовательским интерфейсом, вполне может быть целесообразно преобразовать его в список, чтобы вы имели больше контроля, когда запрос на самом деле казнены. С другой стороны, если вы хотите настроить запрос, то использование IQueryable<T> даст абоненту большую гибкость.

+0

Спасибо за объяснение. У меня тоже была ваша точка зрения, и мы бы искали самый простой пример, реализующий как то, что будет показывать разницу между ситуацией, указанной выше. Я не знаю, как реализовать интерфейсы в классах. то есть я знаю, что такое интерфейс и какую функциональность они предоставляют. Но я не знаю, как их использовать. например. IDisposable interface, я знаю, что он будет делать, когда будет реализован, но как реализовать это моя проблема, так же, как и этот интерфейс IQueryable. –

+0

@Shantanu: Вы, конечно же, не должны реализовывать 'IQueryable ' себя. Вот для чего LINQ to SQL (или что-то еще). –

+0

Не могли бы вы привести пример, может быть ссылка, представляющая их реализацию и разницу между ними. Это была бы отличная помощь –

0

я предлагаю ICollection или IList

IQueryable - обеспечивает функциональные возможности для оценки запросов к конкретному источнику данных, отличающийся тем, что тип данных известен.

В любое время вы можете позвонить в ICollection.AsQueryable().