我正在尝试查找RavenDB中包含单词(索引在那里)的所有帖子
这是一个有效的查询,查找以' Liv'
开头的所有内容let post = query {
for post in session.Query<MyType>() do
where (post.Text.StartsWith("Liv"))
select post
}
尝试使用string.Contains()方法作为Where的条件 关闭,将抛出NotSupportedException。 Here
所以我试图在其中使用搜索方法:
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")
但是因为它期望对象出错而得到错误。试图将String转换为Object(这是一个奇怪的想法),但得到:
无法理解如何翻译x =&gt; x.Invoke(XE)
目前,我没有想法。我应该为搜索和返回对象标记字段。有什么想法吗?
谢谢。
编辑1: 我的表情。获取运行时InvalidCastException,因为它无法将字符串转换为obj。
let expr =
<@ Func<MyType, _>(fun xe -> xe.Text ) @>
|> LeafExpressionConverter.QuotationToExpression
|> unbox<System.Linq.Expressions.Expression<Func<MyType, _>>>
答案 0 :(得分:3)
您提到您尝试将string
转换为object
。我使用:> 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