【问题标题】:What is the structure of IQueryable?IQueryable 的结构是什么?
【发布时间】:2011-01-22 16:13:43
【问题描述】:
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);
}

xIQueryable 类型的变量。

当我运行这段代码时,结果是:0

所以我想知道数据是否存储在x var 中?

【问题讨论】:

  • watch.Stop() 之前尝试x.ToList();

标签: c# linq iqueryable


【解决方案1】:

查询将被延迟评估,因此在尝试枚举结果之前,不会实际执行查询或返回结果。在您的代码示例中,您已经设置了查询,但实际上并没有运行它。如果你把你的数据绑定代码放回去,那实际上会枚举结果并执行它。

出于测试目的,您可以按如下方式强制枚举:

x.ToList();

【讨论】:

    【解决方案2】:

    可以这么说,您只设置了管道 - 您现在可以通过 x 检索结果,但只有在您这样做时才会延迟检索。

    你可以一一检索:

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

    有时急切地检索数据是有利的,在这种情况下,您可以使用ToList(),它会在内部枚举所有结果并将结果集放入 x - 然后您可以测量需要多长时间:

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

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多