也许这是一个简单的问题,但确实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();