Какова структура IQueryable? - PullRequest
       0

Какова структура IQueryable?

3 голосов
/ 22 января 2011
using (var nosql = new DbHelper("Feed")) 
{
    var watch = Stopwatch.StartNew();
    nosql.CollectionName = "rawhi";
    var x = nosql.GetRecords<Event>(p => true, 0, 1000000);
    //GridView1.DataSource = x;
    //GridView1.DataBind();
    watch.Stop();
    long milliseconds = watch.ElapsedMilliseconds;
    Response.Write(milliseconds);
}

x - это переменная типа IQueryable.

Когда я запускаю этот код, результат: 0

Так что мне интересно, хранятся ли данные в x var или нет?

Ответы [ 2 ]

4 голосов
/ 22 января 2011

Запрос будет обрабатываться лениво, поэтому, пока что-то не попытается перечислить результаты, запрос фактически не выполняется или результаты не возвращаются. В своем примере кода вы настроили запрос, но на самом деле вы его не запускали. Если вы вернете свой код привязки данных обратно, это фактически перечислит результат и выполнит его.

Для целей тестирования вы можете вызвать перечисление следующим образом:

x.ToList();
0 голосов
/ 22 января 2011

Вы настроили, так сказать, трубопроводы - теперь вы сможете получать результаты через x, но они лениво извлекаются только тогда, когда вы это делаете.

Вы можете получать их по одному:

foreach(var item in x)
{
  //do something
}

Иногда выгодно быстро получать данные, в этом случае вы можете использовать ToList(), который перечисляет все результаты внутри и помещает набор результатов в x - тогда вы можете измерить, сколько времени это займет:

  var x = nosql.GetRecords<Event>(p => true, 0, 1000000).ToList();
...