I created a web app in Visual Studio 2010, added NHibernate and FluentNHibernate by NuGet. My intention is to test how oData works with latest NHibernate and SQL Server 2008 R2 It's a simple app with one table, User. I added like 5,000 users in the User table to have data to query.
*I am doing the following queries which worked OK:* http://localhost:4380/UserService.svc/Users()?$top=10&$inlinecount=allpages http://localhost:4380/UserService.svc/Users()?$filter=FirstName%20eq%20'Andrew0'&$top=10&$inlinecount=allpages *My question is why the following query fails:* http://localhost:4380/UserService.svc/Users()?$filter=substringof('Andrew',tolower(FirstName))&$orderby=LastName&$top=10&$inlinecount=allpages *The exception is the following(see below the stack trace):* Unable to cast object of type 'NHibernate.Hql.Ast.HqlCast' to type 'NHibernate.Hql.Ast.HqlBooleanExpression'. *Here are my classes:* [DataServiceKey("Id")] [DataServiceEntity] public class User { public virtual int Id { get; protected set; } public virtual string FirstName { get; set; } public virtual string LastName { get; set; } } public class UserMapping : ClassMap<User> { public UserMapping() { Id(user => user.Id).GeneratedBy.Identity(); Map(user => user.FirstName).Not.Nullable().Length(50); Map(user => user.LastName).Not.Nullable().Length(50); } } public class UserDataContext { public ISession Session { set; get; } public IQueryable<User> Users { get { return this.Session.Query<User>(); } } } [ServiceBehavior(IncludeExceptionDetailInFaults = true)] public class UserService : DataService<UserDataContext>, IDisposable { ISession session; public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; config.UseVerboseErrors = true; } protected override UserDataContext CreateDataSource() { var sessionFactory = new HibernateSessionFactory(); this.session = sessionFactory.OpenSession(); return new UserDataContext() { Session = this.session }; } public void Dispose() { this.session.Dispose(); this.session = null; } } *Here is the web response I see in Fiddler:* <?xml version="1.0" encoding="utf-8" standalone="yes"?> <error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"> <code></code> <message xml:lang="en-US">An error occurred while processing this request.</message> <innererror> <message>Exception has been thrown by the target of an invocation.</message> <type>System.Reflection.TargetInvocationException</type> <stacktrace> at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
 at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
 at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
 at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
 at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
 at System.Data.Services.RequestQueryProcessor.ProcessCount()
 at System.Data.Services.RequestQueryProcessor.ProcessQuery()
 at System.Data.Services.RequestQueryProcessor.ProcessQuery(IDataService service, RequestDescription description)
 at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service)
 at System.Data.Services.DataService`1.ProcessIncomingRequestUri()
 at System.Data.Services.DataService`1.HandleRequest()</stacktrace> <internalexception> <message>*Unable to cast object of type 'NHibernate.Hql.Ast.HqlCast' to type 'NHibernate.Hql.Ast.HqlBooleanExpression'.</message>* * <type>System.InvalidCastException*</type> <stacktrace> at NHibernate.Hql.Ast.HqlTreeNodeExtensions.AsBooleanExpression(HqlTreeNode node)
 at NHibernate.Linq.Visitors.QueryModelVisitor.VisitWhereClause(WhereClause whereClause, QueryModel queryModel, Int32 index)
 at Remotion.Linq.Clauses.WhereClause.Accept(IQueryModelVisitor visitor, QueryModel queryModel, Int32 index)
 at Remotion.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection`1 bodyClauses, QueryModel queryModel)
 at Remotion.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel)
 at NHibernate.Linq.Visitors.QueryModelVisitor.GenerateHqlQuery(QueryModel queryModel, VisitorParameters parameters, Boolean root)
 at NHibernate.Linq.NhLinqExpression.Translate(ISessionFactoryImplementor sessionFactory)
 at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryIdentifier, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
 at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters)
 at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow)
 at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression)
 at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query, NhLinqExpression& nhQuery)
 at NHibernate.Linq.DefaultQueryProvider.Execute(Expression expression)
 at NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression expression)
 at System.Linq.Queryable.LongCount[TSource](IQueryable`1 source)
 at System.Data.Services.RequestQueryProcessor.CountQueryResult[TElement](IQueryable`1 query)</stacktrace> </internalexception> </innererror> </error> -- You received this message because you are subscribed to the Google Groups "nhusers" group. To view this discussion on the web visit https://groups.google.com/d/msg/nhusers/-/YaKoMpJ6ctAJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.
