Linq to EF: путаница с возвратом объекта IQueryable - PullRequest
0 голосов
/ 17 мая 2018

Я понимаю, что если я вызову приведенный ниже код, запросит данные из базы данных и вернет фактический объект локально в память. После вызова этого кода последующие манипуляции со списком не будут вызывать базу данных снова:

db.Context.Where(...).ToList()

Если я не использую ToList только с вызовом Where или с вызовом Select, он вернет объект IQueryable <>.

var data = db.Context.Where(...).Select (...) or db.Context.Where(...);

Означает ли это, что метод еще не вызывает базу данных для извлечения данных, пока я не вызову ToList, First () и т. Д ...

foreach (var a in data) 
{
   var b = a.SomeCollection.ToList() 
}

1 Ответ

0 голосов
/ 17 мая 2018

Да, вы можете создавать и манипулировать своими запросами, используя интерфейс IQuery <>.

если вы увидите его свойства, вы обнаружите, что все дело в обработке запросов SQL.у него есть Provider, Query, ConnectionString и т. д.

На самом деле, когда вы вызываете ToList<> или ToArray<> или что-то в этом роде, он просто отправляет IQueryable Object команду выполнить SQL-запрос к базе данных.

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