问题标签 [expression-trees]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2809 浏览

c# - 卡在 C# 中的 BinaryExpression

我要实施

作为表达式树并尝试过

使用 Cond 我要么得到真/假,但不能得到 Condition 应该返回的 LeftEx 或 RightEx。

我在文档中找不到任何内容。

彼得

0 投票
1 回答
4272 浏览

c# - 表达式树 linq 获取参数的值?

在上面的代码中,我想获得属性标题的实际值,而不仅仅是属性名称,这可能吗?

0 投票
3 回答
673 浏览

sql-server - 生成 SQL Server 的“标准”表达式的简单方法?

这与 SQL Server 2005(或更高版本)中的计算列和默认约束(可能还有其他表达式)有关。这两个都使用任意表达式来生成一个值,例如(year+1)对于表示“明年”的计算列(这显然是一个简单而愚蠢的例子)。

我正在尝试做的事情:我希望能够确定某个表中现有的计算列(或默认约束)是否与预期的定义匹配,后者是在用于创建的软件生成的模式中定义的桌子。我可以使用 获取计算列sp_helptext的定义,并从sys.default_constraints目录视图中获取默认约束的定义。

我遇到的问题:我从上述来源获得的表达式是规范化/标准形式,与用于创建列/约束的形式不匹配。在上面的示例中,SQL 将表达式规范化为([year]+(1)). 因此,这种形式和原始形式之间的简单字符串比较将无法可靠地确定它们是否相同。

我已经想到的解决方案:

  • 生成原始表达式,以便它们匹配 SQL 的形式。这需要了解 SQL 用来生成其表单的规则,这些规则没有记录在案,因此这不是一个很好的解决方案。
  • 将两种形式解析为 AST 并进行比较。我已经是原始形式的 AST,但我没有解析器,我宁愿不写。
  • 创建一个临时表并使用原始表达式添加一个计算列,然后读回规范化的表达式。这将非常可靠,但感觉很脏,因为理论上这种比较应该是只读操作。

谁能想到另一个处理这个问题的好选择?我的希望是,也许有人知道一些调试/诊断工具,它们会以标准化/标准形式返回输入表达式。

0 投票
1 回答
217 浏览

linq - 条件 Linq 表达式树

我想要一个在运行时动态编译的 Linq 表达式

我有一个值,如果值大于例如 5000 和另一个值 > 70,那么它应该返回一个常量 x 否则值大于 5000 和另一个值 < 70 它返回 y 如何创建表达式树 a > 5000 & b < 70 然后 d 否则 a > 5000 & b > 70 然后 e

0 投票
2 回答
2033 浏览

c# - 帮助解析我自己的表达式树,C#

我有以下代码。我构建了一个表达式树,但我一直在解析它以找到结果

您将在我的代码中找到详细信息

0 投票
3 回答
24498 浏览

c# - Lambda 到表达式树的转换

我会保持非常简单,

如何从 lambda 中获取表达式树?

还是从查询表达式?

0 投票
1 回答
753 浏览

.net - .net 反射从接口 memberinfo 对象中查找对象

好的,我有一个接口,让我们调用它

还有一个实现接口的类

然后我有一个属性挂在另一个对象上,该对象包含一个包含不同实现的接口“栏”列表,就像这样,

现在,当我像这样使用表达式树/函数时

我可以从表达式树中获取成员信息。memberinfo 虽然指向接口方法,但它的类是接口。这几乎可行,但我需要知道它的父类是什么,所以我需要从 memberinfo 对象中找到并查看它从“bar”接口调用方法,并且类类型是“fooBar”。有没有办法做到这一点,我已经在监视窗口中挖掘了 memberinfo 对象并且无法访问父类型。不过,我可能会遗漏一些东西。

0 投票
3 回答
1363 浏览

c# - C# Lambda+Extensions+Fluent - 我该怎么做?

我希望能够创建采用给定对象的“转换”类,对其执行一系列转换(即更改属性值)并跟踪执行的转换。执行的转换将根据所提供对象的属性而有所不同。

我希望能够使用流畅的样式界面在给定的转换类中应用转换规则(它们是有限的和通用的)。

在高层次上,我知道我可能会有一个 ITransformer、一个 ITransformationRule 和 ITransformationResult 以及一些其他对象来实现这一点。

创建转换类时我希望代码如何工作......

我知道我的 TransformerBase 需要实现采用 Func 或 Expression 的“Transform”方法,并且我知道它需要保留 ITransformationRules 的集合。我也明白我可能会为“WhenCreatedBefore”和“ClassifyAs”方法使用扩展方法。

问题是,我不知道如何让它全部工作。我已经查看了 Fluent Validation .NET 的源代码,因为它以这种方式进行验证,但复杂性让我感到沮丧。我正在寻找涵盖此内容的教程,或者以非常简单的方式将其拼写出来的人。

提前致谢。

0 投票
1 回答
358 浏览

c# - Generic Repository Linq2Sql 阻抗不匹配问题

我正在研究 API 如下所示的存储库模式:

其中visitor是一个域对象,x代表这个域对象。存储库上 Find 方法的方法签名是:

这一切都很棒,直到我尝试将它与 Linq2Sql 一起使用,因为 linq2sql 创建了自己的对象,因此当我想调用时:

存在类型不匹配,因为 linq2sql 需要它创建的类型的函数,而不是我传入的函数。

0 投票
1 回答
2016 浏览

c# - 获取表达式树中方法的表达式

我想在表达式树中创建以下查询:

我如何创建表达式:

我尝试了一切,我什至被困在为 Expression.Call 方法获取 Field 的 MethodInfo 上。Field 是 DataRowExtentions 的一个扩展方法。

我必须为此使用 Expression.Call() 吗?我如何获得 MethodInfo?有更简单的方法吗?

我试过 :

ParameterExpression dataRow = Expression.Parameter(typeof(DataRowExtensions), "dataRow"); 左表达式 = Expression.Call(dataRow, typeof(DataRowExtensions).GetMethod("Field"));

但它不起作用。


我想对 IQueryable tempResults 中的数据创建动态过滤器。

用户将选中 GUI 上的复选框,这些复选框将向 tempResults 中的数据添加“Where”表达式。当用户选择“列”时,我想显示 ColumnName =“列”的 DataRows。

这就是为什么我需要创建 where 表达式。但我非常坚持 MethodInfo 的事情。我也试过这个:

但它也不起作用。

还有其他方法吗?