问题标签 [custom-linq-providers]
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.
c# - C# Linq 在动态表上
我想制作一个 linq to sql 提供程序,允许我查询一个既不在数据模型中映射也不知道的表。
我只知道一个表的别名,我用它来查询另一个已知表进行翻译(从别名到真实表名),之后我将使用标准 linq 查询真实表,读取数据,并将每个结果放入动态的目的。
为了实现这一点,我想我需要定义一个自定义 linq 提供程序来操作表达式树,然后调用标准 linq 到 sql;但目前我不知道该怎么做。
所以我的目标是我会写这样的代码:
提前感谢您的任何建议。
linq - 如何使用 ExpressionVisitor 从 ExpressionTree 中删除 OrderBy 表达式?
Azure 表存储 linq 提供程序不支持 Orderby 语句我有一个类似的表达式
我正在尝试.OrderBy(user => user.UserName)
从表达式树中删除
我还希望访问者从以下表达式中删除 orderby 语句
会变成
c# - 如何获取 IQueryable 的查询文本调用此运算符的实例?
为此实现提供程序并不难:
但是,如果我像这样将两个运算符链接在一起:
或者如果我这样做:
我将如何实现这一点?
在评估当前方法调用或运算符时,在 中VisitMethodCall
,我访问了对其进行方法调用的实例/对象/表达式。这应该要求VisitConstant
评估/翻译/重写该实例表达式。
然后,VisitConstant
如果我这样做:
它不起作用。
如何获取先前构建的查询的查询文本?
linq - System.Linq.Expressions.Expression.CanReduce 属性是什么意思?
从文档及其名称暗示可以推断,CanReduce
对于可以进一步分解为更小的表达式的所有表达式,属性的值必须设置为 true,反之亦然。
但经过仔细观察,这种推论似乎并非在所有情况下都成立。以 为例LambdaExpression
,它肯定是一个复合单元。但是LambdaExpression
直接从类派生的Expression
类不会覆盖该CanReduce
属性。该类Expression
将CanReduce
属性定义为 virtual 并具有返回的实现false
,因此暗示 lambda 表达式不可进一步简化,这是不正确的。
那么这个属性的真正含义是什么呢?
c# - 为什么要引用 LambdaExpression?
我已经阅读了这个答案并从中了解了它突出显示的特定情况,即当您在另一个 lambda 中有一个 lambda 并且您不想意外地让内部 lambda 也与外部 lambda 一起编译时。编译外部的 lambda 表达式时,您希望内部 lambda 表达式保持为表达式树。在那里,是的,引用内部 lambda 表达式是有意义的。
但仅此而已,我相信。还有其他引用 lambda 表达式的用例吗?
如果没有,为什么所有 LINQ 运算符,即在类IQueryable<T>
中声明的扩展都Queryable
引用它们作为参数接收的谓词或 lambda,当它们将信息打包到MethodCallExpression
.
我尝试了一个示例(以及过去几天中的其他几个示例),在这种情况下引用 lambda 似乎没有任何意义。
这是一个方法调用表达式,该方法需要一个 lambda 表达式(而不是委托实例)作为其唯一参数。
MethodCallExpression
然后我通过将它包装在一个 lambda 中来编译它。
但这也不会编译内部LambdaExpression
(GimmeExpression
方法的参数)。它将内部 lambda 表达式保留为表达式树,并且不创建它的委托实例。
事实上,它在不引用它的情况下运行良好。
如果我确实引用了该参数,它会中断并给我一个错误,表明我将错误类型的参数传递给该GimmeExpression
方法。
这是怎么回事?这是什么意思?
c# - LINQ 表达式 API 是否无法创建变量?
我想验证我的假设,即 LINQ 表达式 API 无法让我们创建表示创建局部变量的表达式。
换句话说,您不能创建表达式来表示:
因为那是一个变量声明语句,并且 API 不支持语句 lambda。由 LINQ 表达式 API(而不是委托实例)表示的 lambda 表达式可以使用的唯一状态是它接收的参数和它通过闭包接收的捕获变量。
我的假设(基于几个月的 LINQ 表达式 API 实践)是否正确?
c# - 如何使用 F# 中的 LINQ 提供程序?
在使用提供程序(例如 LINQ to NHibernate)时,在 F# 中使用 LINQ 查询的正确方法是什么,以便与 C# 中的工作方式相同(相同的 AST)?
我的具体问题是将查询转换为 F# 会在 C# 工作时引发错误。这可能是由于 F# 未生成相同的 AST 造成的。Roslyn 为 C# 提供了一个 Visual Studio AST 可视化器扩展,但我不知道有任何用于 F# 的 AST 查看器。
具有以下工作 C# 查询:
翻译成 F# 时:
它失败并出现以下错误:
但是using.First(fun someEntity -> someEntity.SomeReferenceType <> null)
可以正常工作,这导致了上面的结论:在 using 的情况下,AST 的生成方式不同.HasValue
。
sql - 自定义 linq 提供程序在 XML 字段中搜索具有特定值的 xml 属性
我通过 NHibernate 与之交互的一些数据库表包含具有以下结构的 XML 字段:
基本上,每个“C”标签都包含一个属性,它的名称包含在标签“N”中,它的值包含在标签“V”中。
我想要实现的是能够在我的查询中编写这种 LINQ 语法:
这样我就能够获取特定表的实体,该表的 XML 字段包含名为“ attribute_name ”的属性,字符串值由“ attribute_value ”指定。
就这么简单,XML 结构总是这样,我只需要查询具有特定值的单个属性。
进行搜索时,我发现有一种特定的技术可以实现自定义 LINQ 提供程序:
- http://www.primordialcode.com/blog/post/nhibernate-3-extending-linq-provider-fix-notsupportedexception
- http://fabiomaulo.blogspot.it/2010/07/nhibernate-linq-provider-extension.html
- 我将如何更改 Linq-to-Nhibernate 为特定列生成的 SQL?
不幸的是,我无法找到一些关于如何使用 treebuilder 的结构化文档,所以,目前这就是我所拥有的:
我已经找到了正确的 HQL 来执行这样的任务:
我将在 LINQ 查询中调用的方法:
与 HQL 的集成部分:
如您所见,我仍然没有弄清楚如何正确使用带有访问者对象的树构建器来复制上面表达的 HQL 语法。有人可以帮我解决这个问题,或者至少给我一些关于树生成器使用的基本文档吗?谢谢
c# - 使用 LINQ 查询外部数据源
我存储的内容基本上相当于存储在 CSV 文件中的日志数据。它的格式<datetime>,<val1>,<val2>,
等。但是,日志文件按帐户 ID 和月份存储,因此如果您跨月份或帐户 ID 查询,您将检索多个文件。
我希望能够使用 LINQ 查询它,这样如果我可以调用logFiles.Where(o => o.Date > 1-1-17 && o.Date < 4-1-17)
. 我想我需要一些东西来检查该查询中的日期范围,并注意到它跨越 4 个月,这会导致它只检查该日期范围内的文件。
有没有什么方法可以做到这一点,而不涉及使用自定义IQueryable LINQ 提供程序弄脏我的手?如有必要,我可以进入那个兔子洞,但我想首先确保它是正确的兔子洞。
linq - Azure 数据资源管理器 (Kusto) 查询转换器是否存在现有表达式?
是否存在将表达式作为输入并将其转换为Azure 数据资源管理器查询的工具的现有(最好是官方)实现?我试图避免必须实现我自己的ExpressionVisitor这样做。我只需要非常基本的功能,比如字符串操作和将属性引用映射到列名的能力。
或者:是否有用于 Azure 数据资源管理器的现有 LINQ 提供程序以及可用的源?