也許這是一個簡單的問題,但AsQueryable()
有一些性能損失?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();
這很複雜,但是[由Jon Skeet在本頁中解釋](http://msmvps.com/blogs/jon_skeet/archive/2011/02/20/reimplementing-linq-to-objects-part- 43外的過程查詢與 - iqueryable.aspx)。 –