0

我需要从 IQueryable 创建 DcumentSearch 对象的 IEnummerable 以下代码导致数据库加载整个结果,这使我的应用程序变慢。

public static IEnumerable<DocumentSearch> BuildDocumentSearch(IQueryable<Document> documents)
{
    var enumerator = documents.GetEnumerator();
    while(enumerator.MoveNext())
    {
        yield return new DocumentSearch(enumerator.Current);
    }    
}
4

1 回答 1

1

写这个的自然方式是:

public static IEnumerable<DocumentSearch> BuildDocumentSearch(IQueryable<Document> documents)
{
    return documents.Select(doc => new DocumentSearch(doc));
}

当您调用 IEnumerable 扩展方法之一(如 Select、Where、OrderBy 等)时,您仍在为将返回的结果添加到配方中。当您尝试访问 IEnumerable 的元素时(如您的示例中所示),此时必须解析结果集。

对于它的价值,您的 while 循环将更自然地编写为 foreach 循环,尽管它应该具有关于何时执行查询的相同语义。

于 2013-06-26T23:02:34.793 回答