3

我正在使用不稳定的 RavenDB 2.0。是否可以使用 F# 中的 lambda 或类似技术(linq?)查询 RavenDB 2.0?

这是意图示例代码。我正在尝试获取过去 72 小时内的所有帖子。它是错误的,但它使想法得到了理解。

static member public GetTopPosts _ =
    use store = (new DocumentStore(Url = Docs.serverUrl, DefaultDatabase = Docs.dbName )).Initialize()
    use session = store.OpenSession()
    let result = session.Query<Post>().Where(fun x -> x.Date > DateTime.Now - new TimeSpan(72,0,0))
    ...

这样的事情怎么可能完成?

4

1 回答 1

3

是的,你可以这样做。

你可以在FAKE中找到一个这样的例子

在您的情况下,您的查询看起来像这样

let getTopPostsAsOf date =
    use session = docStore.OpenSession()
    query {
       for post in session.Query<Post>() do
       where (post.Date > date)
       select post
    } |> Seq.toArray

这将被调用

let result = getTopPostsAsOf (DateTime.Now - TimeSpan.FromHours(72))

有几点需要注意。

  1. DocumentStore 应该在应用程序启动时创建一次,并且只创建一次。

  2. Also typically only a small set of library calls can be used within the query expressions, hence why I pass in the already computed date. The reason for this is because these expression trees end up getting serialized and executed within raven db engine.

于 2013-02-20T19:08:31.340 回答