IEnumerable и IQueryable, какой он использует, когда я использую ключевое слово var? - PullRequest
0 голосов
/ 17 октября 2011

Я читал об IEnumerable и IQueryable, я читал, что IQueryable лучше с linq, потому что когда вы используете выражения where, он создает точный запрос, который ему нужен, но с IEnumerable он извлекает все строки из базы данных и затем фильтрует в памяти.

Точный вопрос здесь: это то же самое?

Как лучше?

public ActionResult Index()
        {
            var positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null);

            return View(positions.ToList());
        }

 public ActionResult Index()
        {

            IQueryable<positions> positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null);

            return View(positions.ToList());
        }

1 Ответ

1 голос
/ 17 октября 2011

var означает, что тип автоматически определяется компилятором.По сути, если источником данных является IQueryable (например, Entity Framework или текстовый текст Linq to SQL, служба RIA и т. Д.), Ваша переменная также будет IQueryable.Если источником данных является IEnumerable (например, коллекция объектов в памяти), ваша переменная также будет IEnumerable.

, поскольку IQueryable<T> наследуется от IEnumerable<T>, любой IQueryableможно рассматривать как IEnumerable, используя метод расширения AsEnumerable.Все, что следует за вызовом AsEnumerable, будет выполнено локально, а не переведено на язык источника данных (SQL, HTTP REST ...).

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