Tag: 表达式

在.net c中的代码中创建类类型#

当我查看System.Linq.Expressionfunction(在代码中创建表达式树,编译它们,执行它们)时,我问自己这是否也可以创建类 – 特别是generics类。 我期望像Expression.Class()或Expression.GenericClass()。 看看这些方法,我没有看到任何这些。 这将是非常实用的,因为我可以动态地构建业务对象。 实际上这就是我需要的。 如果在.net c#中有另一种方法,那也是我感兴趣的。

表达式树深度限制

我正面临一个问题,试图在Expression <Func >类型的LambdaExpression上调用Compile(),其深度大约为400.较小的值不会导致任何问题。 我找不到任何关于这种限制的事情。 任何人都可以澄清这个吗? 我可以增加这个限额吗? upd:对不起,忘了提,我得到了StackOverflowException: System.Core.dll中出现未处理的“System.StackOverflowException”类型exception{无法计算表达式,因为当前线程处于堆栈溢出状态。}

有点理解.NET中的表达式树

我已经阅读了几篇关于表达式树的文章和几篇stackoverflow.compost。 它让我的大脑明白了。 问题: 1)与DOM(文档对象模型)一样,它是逻辑的内存表示吗? 2)有人解释说这是一种将可执行​​代码转换为数据的机制,使用它可以生成代表代码的数据结构。 是否意味着,表达式树用于设计用户定义的模式? 3)大多数示例将表达式树与Func委托或其他委托结合使用,因此使用委托和其他编程构造不能实现与表达式服务相同的function。 初学者可以理解的解释非常感谢。

将谓词转换为表达式<Func >

有可能以某种方式将Predicate to Expression<Func>转换Predicate to Expression<Func>吗? 我想使用我的ICollectionView的filter来使用下一个IQueryable函数: public static System.Linq.IQueryable Where(this System.Linq.IQueryable source, System.Linq.Expressions.Expression<System.Func> predicate) 谢谢

使用Microsoft Scripting Control评估’If’表达式(通过c#)

我有一些c#代码使用Microsoft Scripting Control来评估一些表达式: using MSScriptControl; // references msscript.ocx ScriptControlClass sc = new ScriptControlClass(); sc.Language = “VBScript”; sc.AllowUI = true; try { Console.WriteLine(sc.Eval(txtEx.Text).ToString()); } catch (Exception ex) { Console.WriteLine(ex.Message); } (txtEx是一个简单的文本字段) 数值表达式:“6 + 4”,“cos(34)”,“abs(-99)”,“round(1.234,2)”等都很好 布尔表达式:“true或false”,“1 = 2”没问题 但是我怎样才能评估一个简单的“如果”? 我试过“if(true,2,3)”,“iif(true,2,3)”,“if(true)then then else 3”和“if(true)then then else 3 endif” 有人可以帮我评估简单的条件表达式吗? 任何帮助非常感谢! RH

替换表达式树中的类型

我正在努力修改表达式树。 我简化了示例,以便在此处更容易显示。 让我们从两个类开始: public class Filter { public string FilterableProperty1 { get; set; } public string FilterableProperty2 { get; set; } } public class Entity { public string FilterableProperty1 { get; set; } public string FilterableProperty2 { get; set; } public string NonFilterableProperty { get; set; } } Filter类中的所有属性也存在于Entity类中。 现在我想使用Filter类使用如下方法返回所需的实体: public IEnumerable GetEntities(Expression<Func> filter) { […]

从Object创建Dynamic Func

我有一个标准对象,其中我将每个属性转换为func,如果它的值不为null。 public class TestClassCriteria { public bool? ColumnA { get; set; } public bool? ColumnB { get; set; } } 这是我到目前为止所做的,但我很确定我没有正确定义lambda。 这就是我想要实现的目标。 funcs.Add(x => x.ColumnA == criteria.ColumnA) 。 var properties = criteria.GetType().GetProperties(); var funcs = new List<Func>(); foreach (var property in properties) { var propertyName = property.Name; funcs.Add(x => x.GetType().GetProperty(propertyName).Name == criteria.GetType().GetProperty(propertyName).Name); } 它没有崩溃或导致任何错误,它只是不起作用。 您将提供的任何帮助将不胜感激。

如何以类型安全的方式编写具有列名作为参数的LINQ查询

我正在寻求有关如何使用LINQ以类型安全方式实现此目的的帮助。 我需要在包含许多列的“性能”表上执行搜索。 根据为搜索指定的条件,我需要选择列并对具有给定值的列执行搜索。 private static IQueryable PerformanceSearch(IQueryable investments, **??? searchColumn**, double minValue, double maxValue) { var entity = ExtendedEntities.Current; investments = from inv in entity.Investments join performance in entity.Performances on inv.InvestmentID equals perfromance.InvestmentID where **performance.searchColumn** >= minValue && **performance.searchColumn** = maxValue return investments; } 现在我正在寻求你的帮助: 如何以类型安全的方式将列“searchColumn”传递给此方法? 我正在考虑创建一个字典对象,以适应某种方式来维护entity framework中的列名。 但不知道如何实现这一目标。 如何使用传递的columnName和应用where子句来执行LINQ查询。 我不能使用If Else或Switch案例如下所示是可能的搜索列表… /* * Search […]

使用Lambda表达式从字段名称中选择不同的字段

我需要从数据库表中获取两个字段(使用linq-to-sql检索),一个字段是日期时间(并且是固定字段),另一个字段始终是小数,但字段可以不同。 该表包含每天处理两次且以不同货币处理的货币数据,因此可能包含AM_USD,PM_USD,AM_EUR等字段。我需要获取数据,例如针对PM_USD的日期列表或针对AM_EUR的日期。 我希望能够使用lambda表达式调用数据(例如,这是一个剥离的示例): data = TableData.Select(x=>new {x.DateTimeAdded, x.[**field name as string**]}); 我一直试图写一个函数来做到这一点,并且失败了。 我管理的最接近的是: private Func<TableData, KeyValuePair> CreateSelect(string FieldName) { var parameterExp = Expression.Parameter(typeof(TableData), “sel”); var dateParameter = Expression.Parameter(typeof(DateTime), “DateTimeAdded”); var fieldParameter = Expression.Parameter(typeof(decimal), FieldName); ConstructorInfo constructorInfo = typeof(KeyValuePair).GetConstructor(new[] { typeof(DateTime), typeof(decimal) }); NewExpression constructExpression = Expression.New(constructorInfo, new ParameterExpression[] { dateParameter, fieldParameter}); var lambda = Expression.Lambda<Func<TableData, […]

通过比较返回lambda表达式的扩展方法

我正在为我们这个庞大的项目创建一个更精细的过滤系统。 其中一个主要谓词是能够通过字符串参数传递比较。 这表现为以下forms:“> 50”或“5-10”或“<123.2” 我有什么(作为一个例子来说明) 视图模型: TotalCost (string) (value: “<50") Required (string) (value: "5-10") EF型号: TotalCost (double) Required(double) 我想要使​​用的表达式: model => model.Where(field => field.TotalCost.Compare(viewModel.TotalCost) && field.Required.Compare(viewModel.Required)); 我希望收到的表达: model => model.Where(field => field.TotalCost 5 && field.Required < 10); 或类似的东西 但是……我不知道从哪里开始。 我把它缩小到了 public static Expression Compare(this Expression<Func> value, string compare) 它甚至可能不正确,但这是我所拥有的一切。 比较构建器不是问题,这很容易。 困难的部分实际上是返回表达式。 我从未尝试将表达式作为函数值返回。 所以我基本上需要保留的是字段并返回一个比较表达式。 有帮助吗? :X […]