gpt4 book ai didi

c# - AsQueryable() 在内部是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 17:54:29 25 4
gpt4 key购买 nike

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

关于c# - AsQueryable() 在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com