IQueryable的结构是什么?

时间:2011-01-22 16:13:43

标签: c# linq iqueryable

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中?

2 个答案:

答案 0 :(得分:4)

查询将被延迟评估,因此在尝试枚举结果之前,查询实际上并未执行或返回结果。在您的代码示例中,您已设置了查询,但实际上并未运行它。如果你重新插入数据绑定代码,那将实际枚举结果,然后执行它。

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

x.ToList();

答案 1 :(得分:0)

您只需设置管道即可 - 您现在可以通过x检索结果,但只有在您执行此操作时才能检索到它们。

您可以逐个检索它们:

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

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

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