Created
December 1, 2012 10:39
-
-
Save rippo/4181453 to your computer and use it in GitHub Desktop.
Error from http://programmers.stackexchange.com/questions/176826/creating-a-predicate-builder-extension-method
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public ContactListDto Filter(IQueryable<Contact> contactList, DataSourceRequest request) | |
{ | |
.. | |
if (request.Filters.Any()) | |
{ | |
//Single column | |
var filter = request.Filters[0] as FilterDescriptor; | |
if (filter != null) | |
{ | |
var cb = new ContactBuilder3(filter); | |
contactList = contactList.Where(contact => cb.Selector(contact).Any(cb.Predicate)); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public ContactBuilder3(FilterDescriptor filter) | |
{ | |
switch (filter.Member) | |
{ | |
case "Name": | |
Selector = (contact) => new[] | |
{ | |
contact.Firstname, | |
contact.Lastname, | |
contact.Firstname + " " + contact.Lastname | |
}; | |
break; | |
default: | |
// some code that uses reflection, avoids having | |
// a case for every column name | |
// Retrieve the public instance property of a matching name | |
// (case sensetive) and its type is string. | |
var property = typeof (Contact) | |
.GetProperties(BindingFlags.Public | BindingFlags.Instance) | |
.FirstOrDefault(prop => | |
string.Equals(prop.Name, filter.Member) && | |
prop.PropertyType == typeof (string)); | |
if (property == null) | |
{ | |
throw new InvalidOperationException( | |
"Column name does not exist"); | |
} | |
Selector = (contact) => new[] {(string) property.GetValue(contact, null)}; | |
break; | |
} | |
switch (filter.Operator) | |
{ | |
case FilterOperator.StartsWith: | |
Predicate = filter.Value.ToString().StartsWith; | |
break; | |
case FilterOperator.Contains: | |
Predicate = filter.Value.ToString().Contains; | |
break; | |
case FilterOperator.IsEqualTo: | |
Predicate = filter.Value.ToString().Equals; | |
break; | |
} | |
} | |
public Func<Contact, IEnumerable<string>> Selector { get; private set; } | |
public Func<string, bool> Predicate { get; private set; } | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Could not parse expression 'Invoke(value(System.Func`2[Domain.Model.Entities.Contact,System.Collections.Generic.IEnumerable`1[System.String]]), contact).Any(value(System.Func`2[System.String,System.Boolean]))': Object of type 'System.Linq.Expressions.ConstantExpression' cannot be converted to type 'System.Linq.Expressions.LambdaExpression'. If you tried to pass a delegate instead of a LambdaExpression, this is not supported because delegates are not parsable expressions. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Remotion.Linq.Parsing.ParserException | |
Could not parse expression 'Invoke(value(System.Func`2[Domain.Model.Entities.Contact,System.Collections.Generic.IEnumerable`1[System.String]]), contact).Any(value(System.Func`2[System.String,System.Boolean]))': Object of type 'System.Linq.Expressions.ConstantExpression' cannot be converted to type 'System.Linq.Expressions.LambdaExpression'. If you tried to pass a delegate instead of a LambdaExpression, this is not supported because delegates are not parsable expressions. | |
Remotion.Linq.Parsing.ParserException: Could not parse expression 'Invoke(value(System.Func`2[Domain.Model.Entities.Contact,System.Collections.Generic.IEnumerable`1[System.String]]), contact).Any(value(System.Func`2[System.String,System.Boolean]))': Object of type 'System.Linq.Expressions.ConstantExpression' cannot be converted to type 'System.Linq.Expressions.LambdaExpression'. If you tried to pass a delegate instead of a LambdaExpression, this is not supported because delegates are not parsable expressions. | |
at Remotion.Linq.Parsing.Structure.MethodCallExpressionParser.CreateExpressionNode(Type nodeType, MethodCallExpressionParseInfo parseInfo, Object[] additionalConstructorParameters) | |
at Remotion.Linq.Parsing.Structure.MethodCallExpressionParser.Parse(String associatedIdentifier, IExpressionNode source, IEnumerable`1 arguments, MethodCallExpression expressionToParse) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseMethodCallExpression(MethodCallExpression methodCallExpression, String associatedIdentifier) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseNode(Expression expression, String associatedIdentifier) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseTree(Expression expressionTree) | |
at Remotion.Linq.Parsing.Structure.QueryParser.GetParsedQuery(Expression expressionTreeRoot) | |
at Remotion.Linq.Parsing.ExpressionTreeVisitors.SubQueryFindingExpressionTreeVisitor.CreateSubQueryNode(MethodCallExpression methodCallExpression) | |
at Remotion.Linq.Parsing.ExpressionTreeVisitors.SubQueryFindingExpressionTreeVisitor.VisitExpression(Expression expression) | |
at Remotion.Linq.Parsing.ExpressionTreeVisitor.VisitLambdaExpression(LambdaExpression expression) | |
at Remotion.Linq.Parsing.ExpressionTreeVisitor.VisitExpression(Expression expression) | |
at Remotion.Linq.Parsing.ExpressionTreeVisitors.SubQueryFindingExpressionTreeVisitor.VisitExpression(Expression expression) | |
at Remotion.Linq.Parsing.ExpressionTreeVisitors.SubQueryFindingExpressionTreeVisitor.Process(Expression expressionTree, INodeTypeProvider nodeTypeProvider) | |
at Remotion.Linq.Parsing.Structure.MethodCallExpressionParser.ProcessArgumentExpression(Expression argumentExpression) | |
at Remotion.Linq.Parsing.Structure.MethodCallExpressionParser.<Parse>b__0(Expression expr) | |
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() | |
at System.Linq.Buffer`1..ctor(IEnumerable`1 source) | |
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source) | |
at Remotion.Linq.Parsing.Structure.MethodCallExpressionParser.Parse(String associatedIdentifier, IExpressionNode source, IEnumerable`1 arguments, MethodCallExpression expressionToParse) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseMethodCallExpression(MethodCallExpression methodCallExpression, String associatedIdentifier) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseNode(Expression expression, String associatedIdentifier) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseMethodCallExpression(MethodCallExpression methodCallExpression, String associatedIdentifier) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseNode(Expression expression, String associatedIdentifier) | |
at Remotion.Linq.Parsing.Structure.ExpressionTreeParser.ParseTree(Expression expressionTree) | |
at Remotion.Linq.Parsing.Structure.QueryParser.GetParsedQuery(Expression expressionTreeRoot) | |
at NHibernate.Linq.NhRelinqQueryParser.Parse(Expression expression) | |
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.HQLExpressionQueryPlan.CreateTranslators(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) | |
at NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) | |
at NHibernate.Engine.Query.HQLExpressionQueryPlan..ctor(String expressionStr, IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters, 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.Count[TSource](IQueryable`1 source) | |
at Cms.Mvc.Helpers.PredicateBuilders.ContactBuilder.Filter(IQueryable`1 contactList, DataSourceRequest request) in e:\WebSites\Popcorn Mail\popcorn-mail\Website\CMS.Website\Cms.Mvc\Helpers\PredicateBuilders\ContactBuilder.cs:line 50 | |
at Cms.Mvc.Controllers.AJaxClientController.ListContact(Int64 id, DataSourceRequest request) in e:\WebSites\Popcorn Mail\popcorn-mail\Website\CMS.Website\Cms.Mvc\Controllers\AjaxClientController.cs:line 112 | |
at lambda_method(Closure , ControllerBase , Object[] ) | |
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) | |
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) | |
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() | |
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) | |
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() | |
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) | |
at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) | |
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() | |
at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) | |
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() | |
at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) | |
at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) | |
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) | |
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) | |
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() | |
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) | |
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) | |
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() | |
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment