繁体   English   中英

AsQueryable()如何在内部工作?

[英]How does AsQueryable() work internally?

也许这是一个简单的问题,但AsQueryable()有一些性能损失吗?

一般来说,我们正在使用RavenDB,我们有这样的代码

protected override IQueryable<T> QueryableIndexRawQuery(string rawQuery, int skip = 0, int take = 128, string indexName = null) 
{ 
    var defaultIndexName = !string.IsNullOrWhiteSpace(indexName) ? indexName : string.Format("{0}{1}", typeof(T).Name, IndexPreffix);

    return this.Session.Advanced.DocumentStore.DatabaseCommands.GetIndex(defaultIndexName) != null 
        ? this.Session.Advanced.LuceneQuery<T>(defaultIndexName).Statistics(out this.Statistics).Skip(skip).Take(take).Where(rawQuery).AsQueryable()
        : this.Session.Advanced.LuceneQuery<T>().Statistics(out this.Statistics).Skip(skip).Take(take).Where(rawQuery).AsQueryable();
}

所以Where子句返回我们IDocumentQuery然后我们尝试表示它AsQueryable()

this.Session.Advanced.LuceneQuery<T>(defaultIndexName).Statistics(out this.Statistics).Skip(skip).Take(take).Where(rawQuery)

AsQueryable()最终在内部做什么的问题? 它是如何转换的? 内存集合示例(如List<>答案也非常有用。

像这样:

    var list = new List<string>() { "1", "2", "3" };
    list.AsQueryable();

.AsQueryable()强制我们在内存中评估查询,因为你使用的是session.Advanced.LuceneQuery() 不建议这样做。 如果要使用IQueryable,则需要使用session.Query()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM