linq - Ravendb/F#/Linq

标签 linq f# ravendb

我是 ravendb 新手,我有 2 个问题;

  • 我在那里存储了大约 65k 个对象,但只有 128 个被返回:为什么会这样? (使用 Robert P.OpenInitializedStore 扩展)

    let printStoreData() =
        use store = DocumentStore.OpenInitializedStore() 
        use session = store.OpenSession() 
        let qs = session.Query<DataModel.simplequote>()
        printfn "%A" (qs.ToList() |> Seq.length )
    
    printStoreData()
    
  • 我对Linq和Fsharp、f#查询表达式和Linq、查询表达式和Ravendb之间的关系很困惑。我什至在 powerpack 中看到了一些 Linq。谁能给我一个关于什么适合什么地方的高级 View ,或者指向一个文档?

最佳答案

默认情况下,Raven DB 页面会阻止您意外返回过多数据并导致系统重载(这是基于 SQL 的系统中性能问题的常见来源)。您需要使用 Seq.skip 和 Seq.take 来获取其余结果。 (也可能是因为在 RavenDB 中索引是异步处理的,因此结果在保存后无法立即可用,但在这种情况下,这似乎不太可能是问题的原因)。

回答问题的第二部分: C# 具有表达式树,其中 C# linq 表达式可以由编译器转换为语法树,而不是生成实际代码。 RavenDB 利用这一点将表示为 linq 表达式的查询转换为可以针对 RavenDB 运行的查询。 F# 具有与 C# 表达式树类似的功能,称为引用。引用使用不同的 F# 特定类型来表示已引用的代码。在许多方面,引号比 C# 的等效项更强大,但 RavenDB 与大多数工具一样,使用 C# 表达式树而不是 F# 的引号。为了解决这个问题,F# power pack 中有一个库可以将 F# 的引用转换为 C# 表达式树。

我使用 Power Pack 将引文转换为 C# 表达式树取得了有限的成功。我发现使用 raven db 的“lucene api”,它不依赖于引号或表达式树。

关于linq - Ravendb/F#/Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10382795/

相关文章:

c# - 如何通过 OrderedDictionary 反向迭代

c# - 在 Dynamic LINQ to Entities 中使用 DateTime

.net - 无法在 infer.net fun 中加载 FSharp.Core 版本 4.0.0//dll 中的硬链接(hard link)依赖项?

f# - 这个 'or' 模式的两侧绑定(bind)了不同的变量集?

.net - Gmail API .NET : How to request messages from one sender

c# - RavenDb 检查索引是否存在

RavenDB Studio - 补丁找不到这个.__document_id

c# - 使用 RavenDB 运行多个测试

c# - 使用 LINQ 或 Lambda 从列表中删除实例?

c# - 使用 Linq 按可为空的日期时间字段过滤