sto cercando di trovare tutti i messaggi in RavenDB contenenti una parola (indice è lì)Qual è la sintassi corretta per RavenDB Metodo di ricerca in F #
Ecco una query che funziona, trova tutto ciò che inizia con 'Liv'
let post = query {
for post in session.Query<MyType>() do
where (post.Text.StartsWith("Liv"))
select post
}
Un tentativo di utilizzare string.Contains() metodo come condizione di Where chiusura, getterà NotSupportedException. Here
Così sto cercando di utilizzare il metodo di ricerca dove:
Expression<Func<T, object>> fieldSelector,
// Expression marking a field in which terms should be looked for.
C# equivalenti da docs:
List<User> users = session
.Query<User>("Users/ByNameAndHobbies")
.Search(x => x.Name, "Adam")
.Search(x => x.Hobbies, "sport")
.ToList();
Il mio primo tentativo è stato quello di andare con
let x = session.Query<MyType>(index).Search((fun xe -> xe.Text), "Liv")
Ma ottenendo l'errore bec ause aspetta l'oggetto. Ho cercato di String abbattuto a Object (che strana idea), ma ottenere:
Non riesco a capire come tradurre x => x.Invoke (xe)
Al momento, io sono fuori idee. Devo segnare il campo per la ricerca e restituire l'oggetto. Qualche idea?
Grazie.
MODIFICA 1: La mia espressione. Ottiene runtime InvalidCastException perché non può eseguire il cast della stringa su obj.
let expr =
<@ Func<MyType, _>(fun xe -> xe.Text) @>
|> LeafExpressionConverter.QuotationToExpression
|> unbox<System.Linq.Expressions.Expression<Func<MyType, _>>>
Sono ragionevolmente sicuro che 'x => x.Name' in' search' non è un 'Func' 'ma Espressione >', in modo da o devi usare espressioni o quotazioni se c'è un'API compatibile con F # ... –
Crea modifica. Il fatto è ... fun xe -> xe.Text restituisce una stringa perché Text è una stringa. Ma la funzione si aspetta obj. Downcasting non ha funzionato perché "Non riesco a capire come tradurre x => x.Invoke (xe.Text)". Sono molto sicuro di cosa significhi "segnare un campo" qui. – Dimka
Un'opzione consiste nell'utilizzare l'API di query Lucene, che prende il nome della proprietà come una stringa. Correlati: http://stackoverflow.com/questions/24625040/search-query-in-ravendb – Jay