解析字符串C#LINQ表达式

Kev*_*vin 15 c# linq

我试图在这里进行一些非常动态的查询 - 最好不要在运行时调用编译器.

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

var s = "from a in queryable where a.Type == 1 select a";
Run Code Online (Sandbox Code Playgroud)

如何从中获得由此产生的IQueryable或表达式?

我见过LINQPad和RavenDb都这样做,所以我确信有一种方法,我还没有找到它.

Jef*_*eff 20

你有一些选择:

  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. 使用动态LINQ(有一些限制和限制,但基本上执行第1点中建议的并且很好,轻量级,并且只能允许某些方法调用.它解析文本查询并从中构建表达式树) - http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

  • 3号在MS Windows CLR下工作.试过它,目前正在生产中使用它.如果它给你prolems检查我的帖子.凯文,如果你选择3号,请确保你按照我链接的帖子中的说明进行操作,否则你将无法使用LINQ,并且你最终会遇到与CodeDom相同的汇编问题. (2认同)