问题标签 [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 回答
990 浏览

linq - Queryable.OfType 是如何工作的?

重要问题不是“Queryable.OfType了什么,而是“我在那里看到的代码是如何实现的?”

反思 Queryable.OfType,我看到(经过一些清理):

所以让我看看我是否明白这一点:

  1. 使用反射来获取对当前方法 (OfType) 的引用。
  2. 新建一个方法,就是一模一样的,就是用MakeGenericMethod把当前方法的类型参数改成,呃,一模一样的东西。
  3. 该新方法的参数不是 source,而是 source.Expression。这不是 IQueryable,但我们会将整个内容传递给 Expression.Call,所以没关系。
  4. 调用 Expression.Call,null作为方法(奇怪?) 实例传递,并将克隆的方法作为其参数传递。
  5. 将该结果传递给 CreateQuery 并转换结果,这似乎是整个事情中最明智的部分。

现在,此方法的效果是返回一个表达式,该表达式告诉提供者忽略返回类型不等于 TResult 或其子类型之一的任何值。但我看不到上述步骤实际上是如何实现这一点的。它似乎正在创建一个表示返回 IQueryable<TResult> 的方法的表达式,并使该方法的主体简单地成为整个源表达式,而无需查看类型。是否只是期望 IQueryable 提供程序只会默默地不返回任何不属于所选类型的记录?

那么上面的步骤在某种程度上是不正确的,还是我只是没有看到它们如何导致在运行时观察到的行为?

0 投票
2 回答
1165 浏览

c# - Linq2SQL“或/与”运算符(ANDed / ORed 条件)

假设我们需要应用几个条件来从名为“Things”的表中进行选择(未知计数和性质)

如果条件已知,我们可以写

但是如果我们必须以编程方式构建 Where 条件,我可以想象我们如何应用 ANDed 条件

ORed 条件呢?注意:我们不想执行联合、唯一或任何其他昂贵的操作,我们希望生成一个查询,就好像我们临时编写它一样

提前致谢。


添加:

PredicateBuilder:动态组合表达式谓词

0 投票
4 回答
315 浏览

.net - 如何在条件之间保留 Linq2SQL OR?

假设我们需要从表中选择两组:“事物”

或者,我们需要编写一条语句来避免union成本:

问题是查询优化器似乎只将表达式修剪为condition2

如何保持条件1条件2之间的优先级

现实生活中的示例解决方法是:

编辑:

示例是获取自动完成列表:

  • 输入:str
  • 输出:开头的str东西和包含的东西str(没有重复)

另一个例子:选择ThingTags具有 3 个属性的:

  • ThingID
  • UserID
  • TagID

我们只想ThingTag为每个选择一个,TagID条件是如果存在UserID,我们选择具有等于参数的那个,否则选择第一个。ThingTagTagID

还在我这儿 ?希望如此 :)


0 投票
1 回答
149 浏览

c# - 没有翻译的Linq2SQL表达式的解决方案

有没有办法为没有翻译的表达提供翻译?

像 double.parse()

0 投票
2 回答
5010 浏览

java - Java 表达式树

是否有相当于.netLINQ 的表达式树JVM?我想在其中实现一些类似于 LINQ 的代码结构,Scala我想知道我是否还必须推出自己的表达式树库。

更新:我对 linq 等价物本身不感兴趣。.net 有大量的表达式树工具,可以轻松地在运行时动态编译代码,并且可以从您的代码中调用它。我要承接的项目与数据库无关。表达式树提供了一种简单的方法来描述对数据进行操作的代码。

如果没有库,我认为我的另一个选择是创建一个发出字节码的库。

0 投票
6 回答
4243 浏览

python - 有没有办法以编程方式生成 Python 字节码?

我想破解 Python 解释器并尝试创建一个小的 DSL 。有没有我可以做类似这个理论代码的模块(类似于 LINQ 表达式树)?

还是只生成 Python 源代码会更容易?使用 C 或 SWIG 或 Cython 可以使这更容易吗?

0 投票
3 回答
1014 浏览

c# - C#、Linq to Sql:为什么不能使用表达式过滤子实体?

我为自己创建了一个 ExpressionBuilder 类,它可以帮助我在执行 Linq to Sql 查询时将可用作谓词的表达式组合在一起。它工作得很好。但是,我刚刚发现表达式只能用于过滤表,而不是实体集?为什么会这样?

例如,如果我有公司和有薪水的员工。我可以创建这两个表达式:

然后我希望能够执行以下操作,但是它仅部分有效:

此外,如果我执行ep.Compile()它会编译,但是在运行查询时会出现错误。

为什么会这样?我错过了什么吗?我觉得这不合逻辑。我能以某种方式解决这个问题吗?或者你有什么好的解决方法?

我知道在这种情况下我可以Where(x => x.Name.StartsWith("John"))改用,但问题是我需要的表达式并不是那么微不足道。它们是较长的AndAlsos 和OrElses 字符串。

0 投票
1 回答
903 浏览

linq - Linq to EF 表达式树/谓词 int.Parse 解决方法

我有一个名为 Enquiry 的 linq 实体,它有一个属性:字符串 DateSubmitted。

我正在编写一个应用程序,我需要返回 IQueryable 以进行在特定日期范围内具有 DateSubmitted 的查询。

理想情况下,我想写一些类似的东西

显然 Linq to EF 不能识别 int.Parse,所以我想我可以通过返回谓词的 Expression 方法来实现我想要的???

我一直在玩 PredicateBuilder 并四处寻找,但我已经成功地绞尽脑汁试图解决这个问题。当然我可以向我的实体添加另一个属性并在那里转换它,但我真的很想了解这一点。任何人都可以解释或给出一个不会让我发疯的例子/链接吗?

提前致谢

标记

0 投票
9 回答
2133 浏览

.net - .net 4.0 表达式树有什么好的用例?

这个灵感来自我的语言大师同事,他似乎无法为它们找到一个好的用途,在我自己的几次蹩脚尝试之后,我不得不同意。

现在我知道,一旦你掌握了一些好的实际理由,这些概念往往会更容易流动。

目前,它的唯一目的似乎是让您编写一个 Linq 提供程序?

是这样吗??这还有其他好处吗?

0 投票
1 回答
882 浏览

f# - 将小型表达式 DSL 基于 DLR 还是在 F# 中手动滚动?

我正在构建一个类似电子表格的应用程序,其中许多小计算需要以树状结构拼接在一起。这些计算是用户定义的,我需要一种方法让用户在运行时输入它们。

我目前的方法是在 F# 中编写一个小的“表达式 DSL”,在其中我使用 FParsec 解析输入,基于可区分联合构建语法树,然后可以评估表达式。这工作得很好。

但是,我正在考虑以 DLR 为基础的语言。沿着这条路走下去有什么好处吗(解析输入,使用 Scripting.AST 而不是我自己的东西生成 AST,让 DLR 处理计算的执行)?

每个计算可能会非常小。计算之间的依赖关系将在更高级别上得到处理。

由于 DLR 将为表达式生成 CIL 代码,我是否可以期待更好的性能,或者开销会吃掉它吗?

(至于使用像 IronPython 这样的现有语言,这可能会很困难,因为我打算在语言语法中添加很多切片和切块运算符和维度处理的东西)