Używam WebAPI wrócić zbiór podstawowych obiektów dostawcy z RavenDb
Klasa Dostawca jest:
public class Supplier
{
public string Id { get; set; }
public string Title { get; set; }
}
WebAPI metoda jest:
[Queryable]
public IQueryable<Supplier> Get()
{
using (var session = _store.OpenSession())
{
return session.Query<Supplier>();
}
}
Kiedy zadzwonić http://localhost:8083/api/suppliers?$orderby=Id%20desc
lub http://localhost:8083/api/suppliers?$filter=Title%20eq%20'Test'
wszystko działa poprawnie. Jednak za każdym razem, gdy używam $ top lub $ skip, otrzymuję wyjątek:
Nie można rzucić obiektu typu "System.Linq.Expressions.PropertyExpression", aby wpisać "System.Linq.Expressions.ConstantExpression".
Jeśli zwrócę całą kolekcję do pamięci przy pomocy ToList(), to działa dobrze, więc wygląda na to problem z odroczonym wykonywaniem zapytania z RavenDb.
Używam najnowszej stabilnej wersji RavenDb.Client 2.0.2.2261.
Czy ktoś jeszcze miał ten problem lub miał na to rozwiązanie?
Ślad stosu jest:
at Raven.Client.Linq.RavenQueryProviderProcessor`1.VisitQueryableMethodCall(MethodCallExpression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 994
at Raven.Client.Linq.RavenQueryProviderProcessor`1.VisitMethodCall(MethodCallExpression expression, Boolean negated) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 693
at Raven.Client.Linq.RavenQueryProviderProcessor`1.VisitExpression(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 140
at Raven.Client.Linq.RavenQueryProviderProcessor`1.GetLuceneQueryFor(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1318
at Raven.Client.Linq.RavenQueryProviderProcessor`1.Execute(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProviderProcessor.cs:line 1352
at Raven.Client.Linq.RavenQueryProvider`1.Execute(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:line 135
at Raven.Client.Linq.RavenQueryProvider`1.System.Linq.IQueryProvider.Execute(Expression expression) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryProvider.cs:line 190
at Raven.Client.Linq.RavenQueryInspector`1.GetEnumerator() in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Linq\RavenQueryInspector.cs:line 99
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Newtonsoft.Json.Serialization.JsonArrayContract.CreateWrapper(Object list)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value)
at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value)
at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.<WriteToStreamAsync>b__c()
at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)
Czy możesz udostępnić ślad stosu? –
Dołączyłem ślad stosu do pytania – valps