c# - 解析字符串 C# LINQ 表达式

标签 c# linq

我正在尝试在这里进行一些真正的动态查询 - 最好不要在运行时调用编译器。

我有一个包含 LINQ 表达式的字符串,例如

var s = "from a in queryable where a.Type == 1 select a";

我怎样才能从中得到 IQueryable 或 Expressions 的结果?

我见过 LINQPad 和 RavenDb 都这样做,所以我相信有办法,只是我还没有找到。

最佳答案

您有一些选择:

  1. 做一些自己开发的东西,解析文本并构建表达式树。对此的标准方法是使用语言解析器来解析字符串(如 ANTLR )。

  2. 使用 CodeDOM 编译查询(不推荐用于生产环境,因为这很慢,并且每次编译都会生成一个程序集,如果你做很多的话,这会使你的 AppDomain 充满程序集。让我强调一下,不要这样做路由,如果你有任何类型的音量——尽管这是 LINQPad 所做的)—— http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/6a4defd2-76f0-4865-97b7-130e4ba7b50a

  3. 使用直接发出 MSIL 的 Mono 编译器(因此每次编译不需要汇编并且速度更快)- Mono Compiler as a Service (MCS)

  4. 使用 Dynamic LINQ(有一些局限和制约,但基本上按照第 1 点中的建议进行操作,它很好,轻量级,并且能够只允许某些方法调用。它解析文本查询并构建来自它的表达式树)- http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

关于c# - 解析字符串 C# LINQ 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782538/

相关文章:

c# - 在 C# 中移动图像

c# - XAML 版权 header

c# - 使用 c# mvc4 阅读 rss 提要

时间:2019-05-08 标签:c#linq: how to retrieve pieces of data from a returned record

c# - 应用 PredicateBuilder 查询项目列表的单个对象属性

c# - 存储过程中 SQL Server 查询的性能问题

c# - iPad View 不旋转

c# - 在 C# 中使用正则表达式删除括号

C# 如何通过 Linq 在列表框数据源(与 List<T> 绑定(bind))中查找对象的索引

c# - 如何检查数组中的所有元素是否都是正整数?