我需要从IQueryable创建一个IEnummerable的DcumentSearch对象 以下代码导致数据库加载整个结果,这使我的应用程序变慢。
public static IEnumerable<DocumentSearch> BuildDocumentSearch(IQueryable<Document> documents)
{
var enumerator = documents.GetEnumerator();
while(enumerator.MoveNext())
{
yield return new DocumentSearch(enumerator.Current);
}
}
答案 0 :(得分:1)
写这个的自然方式是:
public static IEnumerable<DocumentSearch> BuildDocumentSearch(IQueryable<Document> documents)
{
return documents.Select(doc => new DocumentSearch(doc));
}
当您调用其中一个IEnumerable扩展方法(如Select,Where,OrderBy等)时,您仍在添加将返回的结果的配方。当您尝试访问IEnumerable的元素时(如您的示例中所示),必须在此时解析结果集。
对于它的值,你的while循环可以更自然地编写为foreach循环,尽管它应该具有关于何时执行查询的相同语义。