F# F中RavenDB搜索方法的正确语法是什么

F# F中RavenDB搜索方法的正确语法是什么,f#,ravendb,F#,Ravendb,我正在努力寻找RavenDB中所有包含单词索引的帖子 这是一个有效的查询,查找以“Liv”开头的所有内容 let post = query { for post in session.Query<MyType>() do where (post.Text.StartsWith("Liv")) select post } 试图使用string.Contains方法作为Where的条件 闭包,将抛出NotSupportedException。 因此,我尝试使用

我正在努力寻找RavenDB中所有包含单词索引的帖子

这是一个有效的查询,查找以“Liv”开头的所有内容

let post = query {
    for post in session.Query<MyType>() do
    where (post.Text.StartsWith("Liv"))
    select post
}
试图使用string.Contains方法作为Where的条件 闭包,将抛出NotSupportedException。

因此,我尝试使用搜索方法,其中:

Expression<Func<T, object>> fieldSelector, 
// Expression marking a field in which terms should be looked for.
C单据中的等价物:

List<User> users = session
    .Query<User>("Users/ByNameAndHobbies")
    .Search(x => x.Name, "Adam")
    .Search(x => x.Hobbies, "sport")
    .ToList();
我的第一次尝试是和你一起去

let x = session.Query<MyType>(index).Search((fun xe -> xe.Text ), "Liv")
但获取错误,因为它期望对象输出。试图将字符串向下转换为对象这是一个多么奇怪的想法,但得到:

无法理解如何翻译x=>x.Invokexe

现在,我没有主意了。我应该为搜索和返回对象标记字段。有什么想法吗

多谢各位

编辑1: 我的表情。获取运行时InvalidCastException,因为它无法将字符串强制转换为obj

let expr = 
  <@ Func<MyType, _>(fun xe -> xe.Text ) @>
  |> LeafExpressionConverter.QuotationToExpression 
  |> unbox<System.Linq.Expressions.Expression<Func<MyType, _>>>

您提到您尝试将字符串强制转换为对象。我使用:>obj进行了尝试,它确实有效

以下是我的工作查询:

let expr = <@ Func<MyType,_>(fun x -> x.Text :> obj ) @>
                |> LeafExpressionConverter.QuotationToExpression
                |> unbox<Linq.Expressions.Expression<Func<MyType,_>>>
let events = session.Query<MyType>()
                .Search(expr, "Liv*", decimal 1, SearchOptions.Or, EscapeQueryOptions.AllowAllWildcards)
                |> List.ofSeq

我可以合理地确定,搜索中的x=>x.Name不是Func而是表达式,因此,如果有F兼容的API…进行编辑,则必须使用表达式或引号。问题是。。。fun xe->xe.Text返回字符串,因为文本是字符串。但函数需要obj。向下播放不起作用,因为无法理解如何翻译x=>x.Invokexe.Text。我很不确定在这里标记字段到底意味着什么。一个选择是使用Lucene查询API,它将属性名称作为字符串。相关报道:具有讽刺意味的是,这个问题是在Ayende写了一篇反对F的博文之后被问到的:@Idsa他有一个很好的观点,他不是反对F,而是反对将db重写为F。我使用了几个C库,没有任何问题,这就是.Net背后的想法。用任何语言编写并使用任何其他.Net语言。但是,他们应该有一些基本的代码示例,比如连接和设置。我使用的示例来自v1或smth 3.0最新版本。实际上,我做了多行转换,我的版本抛出异常,但你的版本没有。有趣的是,应该是一样的。谢谢你的回答。设xe=x。文本:>obj xe@>