草庐IT

表达力

全部标签

c# - 编译 lambda 表达式会产生带有 Closure 参数的委托(delegate)

当我使用Expression.Lambda(...).Compile()时为了从表达式树创建委托(delegate),结果是第一个参数为Closure的委托(delegate).publicstaticFuncCreateTest(){ParameterExpressiona=Expression.Parameter(typeof(T));ParameterExpressionb=Expression.Parameter(typeof(T));Expressionaddition=Expression.Add(a,b);return(Func)Expression.Lambda(add

c# - 如何从表达式中获取子声明类型?

我有一个父/子类层次结构,其中父类抽象地声明了一个字符串属性,子类实现了它:abstractclassParent{publicabstractstringValue{get;}}classChild:Parent{publicoverridestringValue{get{returnnull;}}}当我使用显式(或隐式)使用Child类的表达式时,我希望表达式的MemberInfo的DeclaringType为“Child”,但实际上是Parent:Childchild=newChild();Expression>expression=(()=>child.Value);Membe

c# - Automapper ResolveUsing 原因 "Can' t 将此解析为可查询表达式”

我正在使用autommaper将域类映射到模型类,反之亦然。我需要加密/解密一个属性。当我将模型映射到域时没有问题,完美地工作:Mapper.CreateMap().ForMember(dest=>dest.Password,opt=>opt.ResolveUsing(src=>this.EncryptString(src.Password)))但是当将实体映射到模型自动映射器崩溃并抛出“无法将其解析为可查询表达式”时:Mapper.CreateMap().ForMember(dest=>dest.Password,opt=>opt.ResolveUsing(src=>this.Dec

c# - 如何将多个表达式传递给 EF 的 OrderBy?

我使用的是EF4.2,但我希望这也适用于EF4和4.1。我想传递一个IQueryable和多个Expression>到一个方法并应用该方法OrderBy和ThenBy到IQueryable视情况而定。我找到了thisanswer,并据此编写了如下方法:publicIQueryableApplyOrderBy(IQueryablequery,IEnumerable>>orderBy){if(orderBy==null){returnquery;}IOrderedQueryableoutput=null;foreach(varexpressioninorderBy){if(output==

c# - 试图理解为什么 ReSharper 告诉我表达式总是错误的

我有一个正在编写的条件,它检查三件事。if(LoggedInMembershipUser==null||obj==null||boolVal)在这种情况下,“LoggedInMembershipUser”只是Membership.GetUser(),“obj”是一些随机业务对象,而“boolVal”显然是一个bool值。当我编写上述语句时,ReSharper告诉我语句的boolVal部分始终为假。但是当我如下所示将boolVal放在开头时,我没有收到通知。if(boolVal||LoggedInMembershipUser==null||obj==null)为什么第一个总是错误的而第二

c# - 何时何地使用表达式树

我正在阅读有关表达式树功能以及如何使用lambda表达式创建委托(delegate)的内容。我仍然不知道它在什么情况下有用,以及我应该在什么真实世界的例子中使用它。 最佳答案 表达式树的主要用途是用于进程外的LINQ提供程序,例如LINQtoSQL。当你这样写的时候:varquery=people.Where(x=>x.Age>18).Select(x=>x.Name);这些lambda表达式可以或者转换为委托(delegate),然后可以执行委托(delegate)(就像它们在LINQtoObject中一样)或者它们可以转换为表达

c# - 评估数学表达式的最佳算法?

评估数学表达式的最佳算法是什么?我希望能够稍微优化一下,因为我可能有一个包含各种变量的公式,我可能需要使用不同的变量对其进行数百次评估。所以基本上,如果我最初可以解析公式,以便以某种方式对其进行优化,然后我可以根据需要多次将变量传递给这个优化版本,每次它都会为我生成一个结果。我将使用Delphi或C#编写此代码。我已经使用调车场算法编写了类似的东西,但每次我需要计算相同的公式时,我都必须经过解析阶段。必须有更好的方法来做到这一点。 最佳答案 如果你想用Delphi来做,你可以看看JclExprEval单元是如何工作的,它是JEDIC

c# - 使用查询表达式对 List<T> 进行排序

我在使用Linq订购这样的结构时遇到问题:publicclassPerson{publicintID{get;set;}publicListAttributes{get;set;}}publicclassPersonAttribute{publicintID{get;set;}publicstringName{get;set;}publicstringValue{get;set;}}一个人可能会这样:PersonAttributeAge=newPersonAttribute{ID=8,Name="Age",Value="32"};PersonAttributeFirstName=new

c# - 在 Linq 的循环中添加 OR 表达式

我有数量可变的OR条件,我想将它们放在一个Linq查询中。如何在循环中执行此操作?基本上,最终的查询是:IQueryableQ;Q=Q.Where(q=>(condition1)||(condition2)||.....||(conditionN));类似于:For(inti=0;i(existingconditions)||(q.Value==i));}在没有最终表达式(Q)在其中嵌套Q的情况下,我可以使用什么语句来替换上面示例中的(现有条件)?谢谢。 最佳答案 您需要构建一个表示您感兴趣的所有条件的表达式树,并结合Express

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

您可以使用LambdaExpressionObjects将lambda表示为表达式。如何创建LambdaExpressionObject表示泛型方法调用,如果您只知道在运行时用于泛型方法签名的类型?例如:我想创建一个LambdaExpressionObjects打电话:publicstaticTSourceLast(thisIEnumerablesource)但我只知道什么TSource在运行时。 最佳答案 staticExpression,T>>CreateLambda(){varsource=Expression.Paramet