[英]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.