Tag: 表达式

并且还在几个Expression <Func >之间:从范围引用

我有3个谓词,我想在AndAlso之间做一个AndAlso 。 我在板上发现了几个样本,但无法解决我的问题。 这些谓词是: Expression<Func> 我有这个代码: Expression<Func> predicate1 = ……; Expression<Func> predicate2 = ……; Expression<Func> predicate3 = ……; 我创建了一个扩展方法来创建一个“AndAlso”: public static Expression<Func> AndAlso( this Expression<Func> expr, Expression<Func> exprAdd) { var param = Expression.Parameter(typeof(T), “p”); var predicateBody = Expression.AndAlso(expr.Body, exprAdd.Body); return Expression.Lambda<Func>(predicateBody, param); //Tried this too //var body = Expression.AndAlso(expr.Body, exprAdd.Body); //return Expression.Lambda<Func>(body, expr.Parameters[0]); } 我这样用: […]

如何在C#中评估自定义括号表达式?

我正在开发一个高级搜索function,其中我需要评估的表达式看起来像是这样的括号: ((Loan number is 1000 And Lock Date is less than 12/03/2015) Or Borrower SSN contains 12345) And ((Buy date is between 12/01/2015 and 23/02/2016 And APR is less than 20000) Or Loan amount is greater than 60000) 或者用简单的话说 ((condition1 And condition2) Or condition 3) And ((condition4 And condition5) Or condition6). 如果我们看一下括号,必须首先评估condition1和condition2,然后用条件3执行它的输出,依此类推…… 我们有API来一次评估两个条件。 然而,在这方面的挑战是 1)如何识别相应的括号并首先对其进行评估。 […]

将MathML解析为简单的数学表达式

我正在使用MathDox公式编辑器来生成MathML。 现在我想将MathDox生成的MathML转换为表达式,我稍后可以使用它来评估以找到答案。 For eg: MathML: 3 + 5 Want to convert to expression as: 3+5 现在我可以用3 + 5来得到答案8。 我正在搜索此转换的javascript或c#解决方案。 试图google它,但没有得到太多的帮助。 我在这里找到了一个更接近的解决方案,但它也是一个桌面应用程序和商业广告。 但是,我想要解决我的问题的开源Web应用程序解决方案。 任何帮助将不胜感激。 注意:为简单起见,我在上面的例子中只提到了简单的加法,但是mathml也可以包含复杂的表达式,如派生和日志。

linq表达式不区分大小写

我正在利用这个项目来使用jqgrid来过滤和排序集合 。 缺少一个function是这个例子不是我需要的不区分大小写的搜索。 因此,如果用户键入“Test”,我希望它与“TEST”,“TeST”等匹配。 。 我有这样的代码: case WhereOperation.Equal: condition = Expression.Equal(memberAccessToString, filter); lambda = Expression.Lambda(condition, parameter); break; case WhereOperation.NotEqual: condition = Expression.NotEqual(memberAccessToString, filter); lambda = Expression.Lambda(condition, parameter); break; case WhereOperation.Contains: condition = Expression.Call(memberAccessToString, typeof(string).GetMethod(“Contains”), Expression.Constant(value)); lambda = Expression.Lambda(condition, parameter); break; 无论如何,下面的这些检查是不区分大小写的,所以“测试”将等于“测试” Expression.NotEqual Expression.Equal Expression.Call(memberAccessToString, typeof(string).GetMethod(“Contains”),

创建动态谓词 – 将属性作为参数传递给函数

我正在尝试创建动态谓词,以便它可以用于过滤列表 public class Feature { public string Color{get;set;} public string Weight{get;set;} } 我希望能够创建一个动态谓词,以便可以过滤List。 我得到一些条件,因为字符串值“>”,“ =”等。我有办法做到这一点吗? public Predicate GetFilter(X property,T value, string condition) //no clue what X will be { switch(condition) { case “>=”: return new Predicate(property >= value)//or something similar } } 用法可能是: var filterConditions=GetFilter(x=>x.Weight,100,”>=”); 如何定义GetFilter? 以及如何在其中创建谓词?

无法从用法中推断出类型参数。 尝试显式指定类型参数

有人可以请我澄清一些事情。 在我的ASP.NET MVC 2应用程序中,我有一个BaseViewModel类,其中包含以下方法: public virtual IDictionary GetHtmlAttributes (Expression<Func> propertyExpression) { return new Dictionary(); } 我们的想法是每个子视图模型都可以覆盖此方法,并根据某些逻辑提供一组合适的html属性,以便在视图中呈现: model.MyProperty, Model.GetHtmlAttributes (model => model.MyProperty)) %> 但是当在上面的行中使用时,当我点击视图时出现编译错误: 方法’ …BaseViewModel.GetHtmlAttributes Expression<System.Func)的类型参数不能从用法中推断出来。 尝试显式指定类型参数。 我必须做以下事情: model.MyProperty, Model.GetHtmlAttributes (model => model.MyProperty)) %> 我只是在寻找一些关于它如何尝试推断类型的清晰度,在HtmlHelper/TextBoxFor扩展方法中这样做是没有问题的? 是因为视图中的HtmlHelper会自动与页面顶部的ViewUserControl中指定的类型相同,而我的代码可以是从BaseViewModelinheritance的任何类型吗? 有可能以这样的方式编写它,它可以推断我的模型/属性类型?

如何为Like创建System.Linq.Expressions.Expression?

我从这个源创建了一个可过滤的BindingList。 它很棒: list.Filter(“Customer == ‘Name'”); 应该做什么。 内部!=像解析器一样工作,将表达式==或!=转换为System.Linq.Expressions.Expression 。 在这种情况下, ==成为System.Linq.Expressions.Expression.Equal 。 不幸的是System.Linq.Expressions.Expression不包含like运算符,我不知道如何解决这个问题。 初始代码如下所示: private static Dictionary<String, Func> binaryOpFactory = new Dictionary<String, Func>(); static Init() { binaryOpFactory.Add(“==”, Expression.Equal); binaryOpFactory.Add(“>”, Expression.GreaterThan); binaryOpFactory.Add(“=”, Expression.GreaterThanOrEqual); binaryOpFactory.Add(“<=", Expression.LessThanOrEqual); binaryOpFactory.Add("!=", Expression.NotEqual); binaryOpFactory.Add("&&", Expression.And); binaryOpFactory.Add("||", Expression.Or); } 然后我创建了一个能够做我想要的表达式: private static System.Linq.Expressions.Expression<Func> Like_Lambda = (item, search) => item.ToLower().Contains(search.ToLower()); private static Func Like = […]

构建C#EntityFramework IQueryable表达式时出现问题

所以我正在尝试构建一个半复杂的搜索表达式,但我不得不尝试创建一个基本的。 用于getValueExpression的表达式如下所示: x => x.PropertyA != null ? x.PropertyA.ToShortDateString() : “” //nullable datetime x => x.PropertyB //string property x => x.PropertyC != null x.PropertyC.ToString() : “” //nullable int 这是我的函数代码,当getValueExpression属于Func类型时,它当前是错误的,无法与字符串进行比较,这非常有意义,我理解为什么会这样,但是我无法弄清楚如何制作一个表达式获取getValueExpression的值以与要搜索的值进行比较。 任何帮助或领导正确的方向将不胜感激。 public static IQueryable Search(this IQueryable source, Expression<Func> getValueExpression, string searchOption, string searchValue) { var searchValueExpression = Expression.Constant(searchValue); var comparisonExpression = Expression.Equal(getValueExpression, searchValueExpression); var lambdaExpression = […]

使用Lambda表达式调用通用方法(以及仅在运行时已知的类型)

您可以使用Lambda表达式对象将lambda表示为表达式。 如果在运行时只知道用于generics方法签名的类型,如何创建表示generics方法调用的Lambda表达式对象 ? 例如: 我想创建一个Lambda表达式对象来调用: public static TSource Last( this IEnumerable source ) 但我只知道TSource在运行时是什么。

entity framework中的LINQ to Entities不支持LINQ表达式节点类型“Invoke”

任何人都可以帮助我解决我的问题。 我使用下面给出的代码: public IEnumerable Getdata(Expression<Func> predicate) { return AccountsContext.InvoiceHeaders.Include(“Company”).Include(“Currency”) .Include(“BusinessPartnerRoleList”).Include(“DocumentType”) .Where(predicate); } ….. 在我的代码中我使用如下 Expression<Func> predicate = PredicateBuilder.True(); predicate = predicate.And(o => o.CompanyId == oInvoiceHeader.CompanyId); List lstInvheader=Getdata(predicate).ToList(); 通过这样做,我得到了例外。 [System.NotSupportedException] — {“LINQ to Entities中不支持LINQ表达式节点类型’Invoke’。”}