问题标签 [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.

0 投票
3 回答
620 浏览

c# - Determining scope of a MemberExpressions target

Is there anyone here with experience writing custom Linq providers?

What I'm trying to do is tell whether a MemberExpression that is a property on a business object should be included in the SQL, or treated as a constant, because its from a local variable that just happens to be a business object.

So for example, if you have this:

At the moment, my query translator will try to execute SELECT * FROM orders o where o.CustomerID = c.CustomerID, which of course doesn't work.

What I would like to do is examine the MemberExpression on the c.CustomerID and try to work out if its a local variable, or just something that is being used as part of the Linq expression.

I have managed to do it as a 2nd pass over the query, looking for fields that SQL Server won't be able to bind, and injecting their values instead, but if possible I'd like to get it all happening at the same time. I tried looking at the expression Type property, and IsAutoClass, but that was just a guess because it contained the word Auto. And it didn't work :)

0 投票
1 回答
75 浏览

.net - 查找 LINQ 提供程序支持的方法

我只是试图Contains在实体框架查询中使用它只是让它失败,因为这种方法在 EF 中不存在。然而,代码编译令人沮丧。

给定任何 LINQ 提供程序,有谁知道如何找到 LINQ 提供程序支持的方法?

0 投票
2 回答
295 浏览

c# - 将 Where() 转换为 sql

我看到 DamienG 的文章 ( http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider ) 如何将客户端属性映射到 sql。我浏览了这篇文章,我看到了它的巨大潜力。绝对将客户端属性映射到 SQL 是一个很棒的主意。

但我想用它来做一些更复杂的事情,然后只是连接字符串。Atm 我们正在尝试向我们的业务对象引入多语言,我希望我们可以保持所有现有的 linq2sql 查询不变,只需更改多语言属性的代码,这样它们实际上会返回 CurrentUICulture 中的给定属性。

第一个想法是将这些字段更改为 XML,然后尝试 Object.Property.Elements().Where(...),但它卡在 Elements() 上,因为它无法将其转换为 sql。我在某处读到 XML 字段实际上被视为字符串,并且仅在应用服务器上它们才成为 XElement,因此无论如何过滤都将在应用服务器上,而不是在数据库上。公平点,它不会像这样工作。让我们试试别的...所以第二个想法是创建一个 PolyGlots 表(名称取自http://weblogic.sys-con.com/node/102698?page=0,1)、一个 PolyGlotTranslations 表和一个 Culture表,其中将从每个国际化属性中引用 PolyGlots。这种方式我想说例如:

现在不幸的是,在这里我收到一个错误,即无法将 Where() 函数转换为 sql,这有点令人失望,因为我确信它会通过。我猜它失败了,因为 IEntitySet 基本上是一个 IEnumerable,而不是 IQueryable,对吗?

有没有另一种方法可以使用compiledExpressions 类来实现这个目标?任何帮助表示赞赏。

0 投票
2 回答
1627 浏览

iqueryable - System.Linq.Expressions.ExpressionVisitor 由于其保护级别而无法访问

我正在尝试按照有关创建 IQueryable LINQ 提供程序的说明进行操作,但是当我按照指示实现继承自的类时,ExpressionVisitor我被告知 ExpressionVisitor 由于其保护级别而无法访问。我错过了一些非常基本的东西吗?

0 投票
2 回答
257 浏览

linq - LINQ Provider to RESTful 服务

我正在为 RESTful 服务编写自定义 LINQ 提供程序。服务中的某些调用返回摘要标头,包括记录总数、页面大小和返回的页面。我需要一种干净的方法来返回这些数据。鉴于此查询:

上面的“foo”变量变成了IQueryable<MyQueryableThingie>. 返回这些摘要数据而不将其附加到集合的每个成员的最佳方法是什么?我考虑过让它们成为上下文的属性,这样的属性会随着每个查询而更新,但我不确定这是最好的模式。

0 投票
6 回答
9938 浏览

linq - 通过 WCF 服务公开 IQueryable

我一直在学习 IQueryable 和延迟加载/延迟执行查询。

是否可以通过 WCF 公开此功能?我想公开一个返回 IQueryable 的 LINQ-to-SQL 服务,然后我可以在客户端执行其他查询,最后使用 .ToList() 执行。OData 格式在这种情况下是否适用?

如果可能的话,这种技术的术语是什么?我可以遵循哪些好的教程?谢谢你。

0 投票
2 回答
999 浏览

vb.net - 构建动态 LINQ 查询

我有一个列表框,如果城镇用户可以从列表中选择,我希望能够基于列表中的选定项目构建 LINQ 查询,例如

我研究了 LinqKit,因为它似乎能够做我需要的事情,但经过数小时的尝试,我无法取得任何进展。我在 VB 中找不到任何有意义或可用的东西。

0 投票
3 回答
897 浏览

.net - 用于创建自定义 Linq 提供程序的库或框架

您知道哪些库或框架可以创建自定义 Linq 提供程序?

你的体验如何?优点和缺点?什么是最好的?

0 投票
1 回答
392 浏览

c# - LINQ 直通提供程序?

我已经实现了在 LINQ 表达式树上收集统计数据的简单类IQueryable和类。IQueryProvider这部分工作正常。接下来,我想将表达式树传递给默认的 LINQ-to-Objects 提供程序进行评估,因为我不需要以任何不同的方式执行它。换句话说,我希望我的提供者收集统计信息作为副作用,将查询传递给默认的 LINQ 实现。

但是,我很难处理默认提供程序。我认为我可以简单地保存对原始IEnumerable集合的引用,然后返回默认提供程序(来自我的自定义IQueryable),例如:

但这不能正常工作。代码最终会抛出一个StackOverflowException. 我认为正在发生的事情(从调试模式下的单步执行中收集)是 LINQ 运行时从上述方法中获取提供程序,然后从我的 custom 中获取表达式树IQueryable,然后它注意到顶级表达式是我的自定义IQueryable. 所以它重新开始这个过程,试图找到合适的提供者。它无休止地这样做,直到发生堆栈溢出。

现在,我唯一能想到的就是想出另一个访问者,它生成另一个表达式树,IQueryable删除了自定义节点,以便 LINQ 运行时调用默认提供程序。这是相当多的工作,因为我需要访问每一片叶子以确保没有嵌套Call表达式IQueryable再次调用我的自定义。有没有更简单的方法?

谢谢您的帮助。

0 投票
2 回答
83 浏览

c# - LINQ 提供程序如何转换任意代码?

我知道 LINQ 提供程序是将实际的 LINQ 查询转换为 SQL 查询(或其他)的“东西”。它通过遍历 LINQ 查询的 AST 并呈现适当的 SQL 查询来实现。到目前为止,一切都很好。

现在我可以想象这适用于简单的 C# 代码,例如

可以(主要是直接)翻译成 SQL。但是,如果我提供任意复杂的 C# 代码,例如:

SQL 中没有与此等效的,那么 LINQ 提供程序在这种情况下会做什么?