也许这是一个简单的问题,但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();
答案 0 :(得分:1)
.AsQueryable()
强制我们在内存中评估查询,因为您使用的是session.Advanced.LuceneQuery()
。不建议这样做。
如果要使用IQueryable,则需要使用session.Query()
。