问题标签 [query-expressions]
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.
f# - 如何在 F# 中编写查询表达式?
我一直在这里查看查询表达式http://msdn.microsoft.com/en-us/library/vstudio/hh225374.aspx
我一直想知道为什么以下是合法的
但你不能真的做这样的事情
当然 F# 允许像这样的可组合性,因此您可以重用谓词?如果我想要圣诞节标题与特定日期之前的另一个谓词相结合怎么办?我必须复制并粘贴我的整个查询?C# 与此完全不同,它有多种构建和组合谓词的方法
f# - 没有 for..in..do 的扩展计算表达式
我所说的扩展计算表达式是指具有通过CustomOperation属性定义的自定义关键字的计算表达式。
在阅读扩展计算表达式时,我遇到了@kvb 的非常酷的 IL DSL:
我想知道在不使用for..in..do
构造的情况下如何组成操作。我的直觉是它从x.Zero
成员开始,但我没有找到任何参考来验证这一点。
如果上面的例子技术性太强,这里有一个类似的 DSL,其中幻灯片的组件没有列出for..in..do
:
我有几个密切相关的问题:
- 如何定义或使用没有
For
成员的扩展计算表达式(即提供一个小的完整示例)?如果它们不再是 monad,我不会太担心,我对它们开发 DSL 很感兴趣。 - 我们可以使用
let!
和的扩展计算表达式return!
吗?如果是,有什么理由不这样做吗?我问这些问题是因为我没有遇到任何使用let!
and的例子return!
。
dynamics-crm-2011 - 如何独立于查询获取动态营销列表的成员
我正在尝试获取动态营销列表的成员列表。当它只有一个(或几个)列表时,我可以单独获取底层查询的结果。但是,当营销列表的数量增加时,一一抓取变得非常无效。
对于静态营销列表,我希望它应该是直截了当的。在基于我的QueryExpression对象中的联系人筛选与所有营销列表相对应的一组 guid 时,我应该能够获取实体联系人的所有实例(或用于创建它的任何基本类型) 。这是正确的认识吗?
(如何)我可以获取服务器上所有动态列表的所有底层成员吗?
编辑:这是自动生成的 fetch-XML。
c# - FilterExpression 的多个条件
我正在使用 Condition 表达式,但我无法向FilterExpression
. 任何人都可以帮忙吗?我在这里发布了我的源代码。
带有过滤器的条件表达式:
// 过滤器2
dynamics-crm-2011 - 如何使用 QueryExpression 对象获取营销列表的成员?
我经常使用QueryExpression,但到目前为止,它是一个直接的 get-this-from-that 或 put-this-in-that。最近,我了解到有一个叫做LinkedEntity的东西,我开始寻找它。作为一个例子,我受到 SO 上的一个相关问题的启发,我开始创建一个表达式来获取列表中的所有成员,因为它是 guid。
不过,我发现的所有示例都遵循相同的模式 - 正如本示例所示。从这个问题中,我了解到这是一种过时的方法(CRM 4.0)。我未能找到更新的示例,我不确定如何设计链接。
有人愿意提供示例代码吗?
我创建了一个链接两个实体的 fetch-XML,但我不清楚如何将其转换为QueryExpression实体。我有这样的东西。有什么建议么?
php - 实现类似 goMongoDB 的查询表达式对象评估
我一直在寻找类似 MongoDb 的(http://docs.mongodb.org/manual/applications/read/#find、docs.mongodb.org/manual/reference/operators/)查询表达式对象评估函数实现或一类。它可能不会涵盖所有高级功能,并且应该具有可扩展的架构。
类似 MongoDB 的查询表达式对象易于理解和使用,提供编写干净、自解释代码的能力,因为查询和要搜索的对象都是关联数组。
基本上说它是从 php 数组中提取信息的便捷功能。知道数组结构(arrayPath),它将允许对多维数组数据执行操作,而无需多个嵌套循环。
如果您不熟悉 MongoDb,请查看要搜索的给定表达式对象和数组。
为简单起见,我将其写为 JSON 字符串。对象内容没有意义,只是显示了 MongoDb 查询语法。
类似 MongoDb 的查询表达式对象
要搜索的数组
使用类似 Mongo 的查询表达式进行查找
因此,借助该函数,我们应该能够向目标数组发出以下查询。
使用类似 Mongo 的查询表达式获取数组路径
家庭作业
我发现 gosner.net/articles/JsonPath/ 可能满足我的需求(不是完全匹配,因为它使用类似 Xpath 的表达式),需要注意的是,它严重依赖正则表达式和字符串解析,这肯定会慢与仅数组(类似 JSON)的实现相比,它下降了。
我也在这里找到了一个类似的问题,@stackoverflow Evaluating MongoDB-like JSON Queries in PHP。得到的答案是使用一些 SPL 函数,我习惯于在大多数情况下避免使用这些函数。
不知道作者是否提出了功能,他一直在努力开发。在 thereisamoduleforthat.com/content/dealing-deep-arrays-php 上找到了可能的 arrayPath 实现,因此缺少此实现是因为它依赖于指针。
我知道这不是一个简单的问题,这就是为什么我在开始我自己的课程的实际开发之前问它的原因。
我很欣赏架构技巧、相关或类似的代码,这可能是动态构建 php“if..else”表达式的一个很好的实践示例。强调文本
如何编写非 SPL 版本?
@Baba 提供了一个优秀的类,它是使用 SPL 编写的。我想知道如何在没有 SPL 的情况下重写此代码。
有两个原因
- 多次调用该类会产生函数开销,这可以避免在原始 PHP 中重写它。
- 它可以很容易地移植到 SPL 不可用的原始 Javascript,从而更容易在两个平台上进行代码维护。
结果
创建的ArrayQuery 类发布在 Github 上,请考虑签出存储库以获取更新。
SPL、原始 PHP 版本和 Chequer2 FORP分析器输出
简单来说-
- 原始 PHP 版本的执行速度比 SPL 版本快 10 倍,消耗的内存减少了 20%。
- Chequer2 类的执行速度比 PHP SPL 类慢 40%,比原始 PHP 版本慢近 20 倍。
- MongoDb 是最快的(比原始 PHP 实现快 10 倍,消耗的内存少 5 倍),除非您确定要避免与 MongoDb 交互,否则不要使用这些类。
MongoDb 版本
声压级版本
原始 PHP(最新的 ArrayQuery 类)版本
Checker2 版本
MongoDb 参考测试分析代码
带有 SPL 类分析代码的 PHP
SPL 类 的parse()函数已稍作修改以在执行后返回值,也可以对其进行修改以接受表达式,但它对于分析目的并不是必需的,因为每次都会重新评估表达式。
原始 PHP(最新的 ArrayQuery 类)分析代码
checker2 PHP 分析代码
使用的数据(与他的回答中提供的@baba 相同)
forp-ui稍作修改的示例 ui 加载器(使用 ?profile=FILE_TO_PROFILE 调用)
entity-framework - Linq 包含用于 f# 样式流水线的辅助函数
我想从数据库中急切地加载一些记录及其关系,如下所示:
这很好用,尽管我必须将查询表达式包装在括号中才能在其上调用 include,这看起来有点奇怪。我想知道是否可以编写一个辅助函数来以更惯用的 F# 样式调用 Include,我想出了这个。
现在我的查询看起来像这样(类型推断适用于可查询类型:D)
它编译!但是当我运行它时,我从 DbExtensions 库中得到一个错误,告诉我The Include path expression must refer to a navigation property defined on the type.
在传递给 Queryable.Include 之前检查 lambda 函数,它看起来像这样{<StartupCode$Service>.$Worker.emails@30} Microsoft.FSharp.Core.FSharpFunc<Entities.Email,Entities.QueueItem> {<StartupCode$Service>.$Worker.emails@30}
。
我想问题与我的 lambda 如何被解释以及FSharpFunc
s 和Expression<Func<>>
s 之间的转换有关。我尝试重写我的辅助函数,使其具有一个Expression<Func<'a, 'b>>
作为第一个参数,甚至下载了 FSharp.Core 源代码以在 Seq 模块和 QueryBuilder 的实现中寻找灵感,但我无法得到任何工作。我尝试重新定义我的辅助函数:
但后来我得到编译器错误This function takes too many arguments, or is used in a context where a function is not expected
。
我有点难过。任何人都可以建议我如何让这个工作?
c# - 移动服务查询异常
当我使用通用代码时:
其中TParent:IEnity
我发现了异常:
在“Where”移动服务查询表达式“Convert(prnt).Id”中不支持成员“Id”。
但是,如果我将泛型更改为类型:
我有正常的结果。为什么?我怎样才能使用泛型?