我需要执行复杂的查询,例如:
(from e in _dataContext.Entity.Expand("RelationA/RelationB")
select e)
.OrderBy(x => x.RelationA.RelationB.Property)
.ThenBy(x => x.RelationA.Property)
.ThenBy(x => x.Property)
.Skip(0).Take(10);
或
(from e in _dataContext.Entity.Expand("RelationA/RelationB")
orderby e.RelationA.RelationB.Property, e.RelationA.Property, e.Property
select e)
.Skip(0).Take(10);
上面给出了一个服务器错误,说明无法执行该过程。
如果仅按第一关系和属性进行排序,则没有问题,就是当我在订单中放置两个关系时。
服务器端使用:Microsoft.Data.Services 5.6.0.0
使用客户端:Microsoft.Data.OData 5.6.4.0
可以执行此类查询,或者说不合适,谢谢。
堆栈追踪:
en System.Data.Services.Client.DataServiceRequest.Execute[TElement](DataServiceContext context, QueryComponents queryComponents)
en System.Data.Services.Client.DataServiceQuery`1.Execute()
en System.Data.Services.Client.DataServiceQuery`1.GetEnumerator()
en System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
en System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
en Sigap.Wpf.ViewModel.GenLocalidadListViewModel.ObtenerPaginado()
有关错误的更多信息:
<?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code /><m:message xml:lang="es-MX">An error occurred while processing this request.</m:message><m:innererror><m:message>No se pudo aplicar formato al nodo 'OptionalValue' para su ejecución como SQL.</m:message><m:type>System.InvalidOperationException</m:type><m:stacktrace> en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitOptionalValue(SqlOptionalValue sov)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitSearchedCase(SqlSearchedCase c)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitWithParens(SqlNode node, SqlNode outer)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitUnaryOperator(SqlUnary uo)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitSearchedCase(SqlSearchedCase c)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitWithParens(SqlNode node, SqlNode outer)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitUnaryOperator(SqlUnary uo)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitSearchedCase(SqlSearchedCase c)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitRowNumber(SqlRowNumber rowNumber)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitRow(SqlRow row)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitSelect(SqlSelect ss)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitAlias(SqlAlias alias)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.VisitSelect(SqlSelect ss)
en System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
en System.Data.Linq.SqlClient.SqlFormatter.Visitor.Format(SqlNode node, Boolean isDebug)
en System.Data.Linq.SqlClient.SqlFormatter.Format(SqlNode node)
en System.Data.Linq.SqlClient.SqlProvider.BuildQuery(ResultShape resultShape, Type resultType, SqlNode node, ReadOnlyCollection`1 parentParameters, SqlNodeAnnotations annotations)
en System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
en System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
en System.Data.Linq.DataQuery`1.System.Collections.IEnumerable.GetEnumerator()
en System.Data.Services.Internal.ProjectedWrapper.EnumerableWrapper.GetEnumerator()
en System.Data.Services.WebUtil.GetRequestEnumerator(IEnumerable enumerable)
en System.Data.Services.QueryResultInfo.MoveNext()
en System.Data.Services.DataService`1.SerializeResponseBody(RequestDescription description, IDataService dataService, IODataResponseMessage responseMessage)
en System.Data.Services.DataService`1.HandleRequest()</m:stacktrace></m:innererror></m:error>